并发
Posted xiaosuye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发相关的知识,希望对你有一定的参考价值。
一个线程有五种状态:
新建状态:使用 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对象。
以上是关于并发的主要内容,如果未能解决你的问题,请参考以下文章