Java并发包1--线程的状态及常用方法

一、线程主要有以下几种状态:

new(新建):线程刚刚被创建

runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态

blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态

waiting(等待):线程进入等待状态,需要等待其他线程做出一些特点动作(通知或中断)

time_waiting(超时等待):和waiting状态类似,不过可以在指定的时间自行结束等待

terminated(终止状态):当线程执行run方法完成或因为异常退出时进入终止状态

二、线程的各种状态的流转图如下示:

 

 三、线程的各种方法用法

start():线程被创建之后,执行start方法使线程进入就绪状态,等待系统调度分配CPU来执行

run():线程执行业务逻辑,执行完成run方法里面的内容就会进入终止状态

yield():yield方法是让步的意思,将当前线程状态由“运行中”进入到“就绪状态”,目的是让出CPU来给其他线程来执行,但是不会释放当前线程持有的对象锁(让步之后就绪的线程等待CPU执行,有可能还会执行让步的线程)

wait():使当前线程进入等待状态,并且释放当前线程持有的对象锁,直到等待的时间到了或者是其他线程执行该对象的唤醒方法,如何才可继续进入就绪状态等待CPU

notify():唤醒该对象监视器上等待单个线程

notifyAll():唤醒该对象监视器上等待的所有线程

sleep():使当前线程进入睡眠等待状态,不会释放对象锁,睡眠时间结束重新进入就绪状态

join():join方法会使当前线程当期执行,直到join的线程执行完成才会继续执行。比如main方法里面有两个线程

t1.start();

t1.join();

t2.start();

则t1线程执行之后,再执行t1.join(),那么此时main线程就会放弃后面的执行,直到t1线程执行结束之后才会继续执行main线程,然后继续执行t2线程。

猜你喜欢

转载自www.cnblogs.com/jackion5/p/10765565.html