并发

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对象。

以上是关于并发的主要内容,如果未能解决你的问题,请参考以下文章

并发数并发以及高并发分别是什么意思?

Jmeter并发设置

并发编程的基础

nodejs每秒并发多高

掌握系列之并发编程-1.并发基础

Java并发编程:并发容器ConcurrentHashMap