menu

线程摘录

线程摘录
线程的生命周期:
  1. 新建:当创建Thread类的一个实例时,此线程进入新建状态(未被启动)Thread thread = new Thread()
  2. 就绪: 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候CPU资源。t1.start()
  3. 运行: 线程获得CPU资源正在执行任务run()
  4. 阻塞: 暂停自己的执行,让出CPU。
    • 正在睡眠:用sleep(long t)方法可使线程进入睡眠方式,一个睡眠着的线程在指定时间过去后可进入就绪状态。
    • 正在等待:调用wait()方法。
  5. 死亡:执行完毕或被其他线程杀死。

    sleep和wait比较

    sleep:

  6. Thread类的方法。
  7. 可以在任何地方使用,调用过程中线程不会释放锁。
  8. 让出CPU,不会导致锁行为的改变。
    wait:
  9. Object类的方法。lock.wait(1000)
  10. 不仅让出CPU,还会释放已经占有的同步资源锁。
  11. 只能在syncronized方法或者synchronized块中使用。

    死锁

  12. 死锁的概念
    死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
  13. 死锁的四个必要条件
    • 互斥条件
    • 请求与保持:一个进程因请求资源而阻塞时,对已经获得的资源保持不放。
    • 不剥夺条件:进程已获得的资源在未使用完之前,不能强行剥夺。
    • 循环等待执行