<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()一起使用
wait()释放锁, 等待其他对象唤醒
notify() 唤醒一个线程
notifyAll() 唤醒全部线程
初识 java 线程(Thread)
来源: http://www.bubuko.com/infodetail-2961901.html