码迷,mamicode.com
首页 > 其他好文 > 详细

并发(三)

时间:2019-01-13 20:25:23      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:join   对象锁   object类   参数   sig   结束   obj   静态   sleep   

一个线程有五种状态:

新建状态:使用 new 关键字后,线程处于新建状态。

就绪状态:使用start()后线程进入就绪状态,sleep()结束之后线程进入就绪状态,join()结束之后线程进入就绪状态,I/O完成后线程进入就绪状态,notify()或notifyAll()之后线程进入就绪状态,interrupt()后线程进入就绪状态。

运行状态:线程获取到cpu资源是,进入运行状态。

阻塞状态:sleep()后线程进入阻塞状态,join()后线程进入阻塞状态,wait()后线程进入阻塞状态,I/O线程进入阻塞状态,synchronized线程进入阻塞状态。

死亡状态:run()任务结束线程进入死亡状态。

 

在阻塞状态中 中断阻塞状态:

I/O阻塞不可中断。

synchronized阻塞不可中断。

调用notify()或notifyAll()可以中断 由wait()带来的阻塞状态,进入就绪状态。

interrupt()可以中断阻塞状态,进入就绪状态。

 

关于interrupt()

在线程A中执行B.interrupt(),如果线程B在阻塞状态,线程B进入就绪状态。

在线程A中执行A.interrupt(),线程A的中断状态变为true。

interrupt()只能中断阻塞状态下的阻塞。

isInterrupted()判断线程的中断状态。

interrupted()静态方法 恢复中断状态。

 

sleep()、yield()和wait():

sleep()和yield()是Threed中的方法,wait是Object中的方法。

sleep()和yield()不释放对象锁,wait()释放对象锁。

调用sleep()进入阻塞状态,在参数时间过后,线程进入就绪状态。

调用yield()直接进入就绪状态。

调用wait()进入阻塞状态,可以在参数时间后,线程进入就绪状态,也可以调用notify()或notifyAll()线程进入就绪状态。

 

Condition 接口

Condition接口有一个ConditionObject的实现类,类中几个重要方法:

1.await() 基本等价于 Object类下的wait()。

2.signal()基本等价于 Object类下的notify()。

3.signalAll()基本等价于 Object类下的notifyAll()。

在创建Condition对象时,一般采用Lock对象下的newCondition().

具体实现是,Lock对象的newConditon()调用sync对象的newCondition(),这个方法直接New ConditionObject对象。

并发(三)

标签:join   对象锁   object类   参数   sig   结束   obj   静态   sleep   

原文地址:https://www.cnblogs.com/xiaosuye/p/10263786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!