JAVA线程

1.Java线程
1.1 进程与线程
进程:是操作系统的结构基础,是一个程序运行时的实例,是系统进行资源分配和任务调度的基本单位。
线程:线程是进程中的一个执行流程,是CPU调度和分派的基本单位。一个进程中包含至少一个线程。
JVM中进程和线程的区别:
1. 一个进程是一个JVM实例,每个进程分配独立的内存空间:堆,方法区,本地方法区,栈,程序计数器;每个线程有自己独立的栈空间和程序计数器,堆和方法区和所有的进程共享。
2.操作系统层面上看,每个进程有独立的地址空间,线程却没有,线程依托进程而生。

1.2 线程创建的方式

    //1.new Thread实例
    new Thread(()->{System.out.println("Hello word!"+Thread.currentThread().getName());},"thread-1").start();

    //2.实现Runable接口
    Runnable r1 =()->{
        System.out.println("Hello world!"+Thread.currentThread().getName());
    };
    new Thread(r1,"thread-2").start();

    //3.future   有返回
    Callable c1=()->{
        System.out.println("hello world");
        return 1;
    };
    FutureTask futureTask=new FutureTask<>(c1);
    new Thread(futureTask).start();
    System.out.println(futureTask.get());

1.3线程的状态
1.初始状态(NEW):新创建一个线程,但线程未启动,即未调用start()方法;
2.运行(RUNNING):java线程将线程色READY和RUNNING状态合称为“运行”。就绪态表示线程已经 进入可运行线程池中,在获取CPU的时间片后即转为RUNNING状态;
3.阻塞状态(BLOCKED):当前线程因获取不到锁阻塞。
4.等待(WAITING):当前线程处于等待其他线程做一些特定动作。
5.超时等待(TIME_WAITING):在等待时间完后,自行返回。
6.终止(TERMINATED):线程已经执行完毕。

注:
1.Thread.sleep(long millis),当前线程进入TIMED_WAITING状态,但不释放锁。
2.Thread.yield(),当前线程 放弃CPU时间片,但不释放锁,且当前线程仍可能被再次选中执行。
3.t.join()、t.join(long millis),当前线程等待t线程的执行结果,当前线程进入WAITING或TIMED_WAITING状态,不释放锁。
4.o.wait(),o.wait(long millis)当前线程进入WAITING或者TIME_WAITING状态,等待o.notify()或者o.notifyAll(),或者等待时间到唤醒,当前线程释放锁。
5.obj.notify()唤醒在此对象监视器上等待的单个线程,选择是任意性的。notifyAll()唤醒在此对象监视器上等待的所有线程。当前线程释放锁。

你可能感兴趣的:(JAVA线程)