等待线程 join()
- 有时,我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。
- join方式使用时会让线程进入阻塞, 而且是如A执行B.join 会让A进入阻塞 B线程会正常运行, 直到B执行完, A才会执行
获取当前线程的引用 currentThread()
使用Thread.currentThread()
相当于获取当前线程的实例
休眠线程 sleep()
-
有一点要记得,因为线程的调度是不可控的,所以,这个方法只能保证休眠时间是大于等于休眠时间的。
-
方法
public static void sleep(long millis) throws InterruptedException 休眠当前线程 millis 毫秒
public static void sleep(long millis, int nanos) throws InterruptedException 可以更高精度的休眠
线程的状态
线程的所有状态
线程状态的意义
-
NEW
Thread对象有了,但是内核中的PCB对象还没有,就是任务布置了,还没有开始执行
-
RUNNABLE
就绪状态, 正在CPU上执行,或者在就绪队列上等待执行
接下来三种都是线程属于阻塞时的状态, 不会在CPU上执行,等时机成熟有机会才会进入就绪状态执行
-
BLOCKED
等待锁
-
WAITING
wait导致
-
TIMED_WAITING
sleep导致
-
TERMINATED
内核中线程已经结束PCB没了,但是thread对象还在等待GC来回收
所以有一点较重要, isAlive是判断线程是否存活,也就是判断PCB是否存活, 所以只有中间四种状态才会显示true