线程摘录
线程的生命周期:
- 新建:当创建Thread类的一个实例时,此线程进入新建状态(未被启动)
Thread thread = new Thread() - 就绪: 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候CPU资源。
t1.start() - 运行: 线程获得CPU资源正在执行任务
run() - 阻塞: 暂停自己的执行,让出CPU。
- 正在睡眠:用
sleep(long t)方法可使线程进入睡眠方式,一个睡眠着的线程在指定时间过去后可进入就绪状态。 - 正在等待:调用
wait()方法。
- 正在睡眠:用
- 死亡:执行完毕或被其他线程杀死。
sleep和wait比较
sleep:
- Thread类的方法。
- 可以在任何地方使用,调用过程中线程不会释放锁。
- 让出CPU,不会导致锁行为的改变。
wait: - Object类的方法。
lock.wait(1000) - 不仅让出CPU,还会释放已经占有的同步资源锁。
- 只能在syncronized方法或者synchronized块中使用。
死锁
- 死锁的概念
死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 - 死锁的四个必要条件
- 互斥条件
- 请求与保持:一个进程因请求资源而阻塞时,对已经获得的资源保持不放。
- 不剥夺条件:进程已获得的资源在未使用完之前,不能强行剥夺。
- 循环等待执行

WeChat - 微信公众号