java基础—线程(1)

 

一.线程的五个状态

状态图如下

 1)新建状态

       新建了一个线程对象。

 2)就绪状态

       其他线程 调用了该线程对象的start()方法后(此时已获得对象锁)即进入临界区,等待cpu切换线程状态(即获取cpu时间片)然后进入运行状态。

 3) 运行状态

       获取了时间片,开始执行程序代码。(对cpu内核,进程,线程等不了解的可以翻看我的其他文章)

 4) 阻塞状态

       线程因为没有获取到锁而进行等待。需要进入就绪状态,然后运行状态。造成当前情况主要有以下三种原因:

       一。等待阻塞:运行的线程调用wait()方法释放锁,jvm 将线程放入"等待池"(形象栗子),其实是进入Wait Set

等待集(jvm为每个对象都维护了两个类似队列样的数据结构,不一定符合先进先出原则),等待集存储执行了wait()方法

的线程。

       二。同步堵塞

        线程申请锁而落选,jvm将这些线程放入“锁池”即Entry Set入口集。

       三。其他堵塞

        比如sleep()和join(),以及io请求等,当sleep超时(之间不会释放锁)、join线程终止以及io处理完毕,此时线程才会进入就绪状态。

5 ) 死亡状态

     当线程执行结束或者因异常退出run()方法时,此线程周期结束。

 

**************

奥特曼打怪兽

**************

1.线程yield()方法,放弃当前获取的时间片,进入就绪状态。

2.suspend()与resume()以及wait()与notify()区别,前者阻塞时(获取到了锁的情况下)不会释放锁(这里可能产生死锁),后者主动释放锁(此处说明必须在同步块里了不然抛出IllegalMonitorStateException,当然如果是wait()而不是wat(int xxx)方法则也可能出现死锁。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值