<1>.概念问题
线程的状态:1.NEW : 没有start的线程
2.RUNNING :可运行线程,可能正在执行,也可能正在等待操作系统中的其他资源,比如cpu时间片
3.BlOCKED:受阻塞并且正在等待监视器锁(monitor lock)的线程状态
4.WAITING :一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态
5.TIMED_WAITING:一个正在限时等待另一个线程执行一个动作的线程处于这一状态
6.TERMINATED:已经退出的线程
<2>状态分析
NEW:new Thread()后,没有调用start()方法前
RUNNING :线程正常运行中,但是也不是 每个时间片段都在执行,cpu分配给当前线程的时间片内执行
TERMINATED:线程结束
BlOCKED:等待获取监视器锁以期进入同步代码块/方法,如进入synchronized方法,被阻塞
WAITING:
不带超时值的Object.wait方法被调用
不带超时值的Thread.join方法被调用
不带超时值的LockSupport.park方法被调用
TIME_WAITING:
Thread.sleep 方法被调用
带有超时值的Object.wait 被调用
带有超时值的Thread.join 被调用
LockSupport.parkNanos 被调用
LockSupport.parkUntil 被调用
LockSupport类处于sun包下面,里面的方法都是调用Unsafe类(操作内存空间),一般情况下不会手动调用
<3>Thread类中常见方法
1.join()很多情况,主线程创建并启动子线程,如果子线程中需要进行大量的耗时计算,主线程往往早于子线程结束。这时,如果主线程想等待子线程执行结束之后再结束,比如子线程处理一个数据,主线程要取得这个数据,就要用join() 方法
2.interrupt() 标记线程中断
1. 当线程处于Blocked状态(sleep,wait,join),线程会退出阻塞状态,并抛出一个InterruptedException。
2. 当线程处于Running状态,只是线程的interrupt标记被设置为true,线程本身的运行不会受到任何影响
3.yield() 线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程
4.wait()和notify(),notifyAll()一起使用
下班了,待续。。。