java中的线程状态转换

原创
2014/03/12 23:24
阅读数 445

java中的线程状态转换:

看到一张舒服的java线程状态转换图:

介绍那几个重要的api:

  • t.start(): 启动线程,此时t线程进入可运行状态(就绪状态),不要以为start()完就执行run方法了;
  • t.yield(): t线程主动让出cpu分片,进入就绪状态(就绪状态:即指该线程因为缺少cpu资源才进入的状态);
  • t.sleep(): t线程进入阻塞状态(不会释放任何对象锁),睡眠完之后继续进入就绪状态;
  • t2.join(): t线程进入阻塞状态(不释放任何对象锁),等待t2线程执行完(run方法运行结束),继续进入就绪状态;
  • synchronized(o): t线程因为请求o对象锁(已经被其他线程锁住),而进入锁池,一旦由os分配到对象锁,就进入就绪状态;
  • o.wait(): 此方法必须在synchronized(o){..}代码块中执行,让出o对象锁(这也是和sleep的最大区别),进入等待队列,必须由其他线程notify()或notifyAll, notify之后,也不是直接就进入就绪状态(有可能有很多线程都在等这把锁),得先进入锁池。

不吝指正。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
8 收藏
0
分享
返回顶部
顶部