Java并发编程之基础篇(四) -- 线程间的协作

Java并发编程之基础篇(四) – 线程间的协作

这篇介绍一下线程之间如何进行通信

之前介绍的内容都是如何保证线程之间的运行互不干扰,但是有的时候,线程之间必须互相合作。比如清洗盘子完成之后,才能对盘子进行烘干操作,烘干必须在清洗之后,那么清洗线程和烘干线程如何进行沟通呢?

Java进程间的通信与访问共享变量一样,都需要借助互斥的特性来实现,在互斥的基础上,JDK为线程提供了一种自我挂起的能力。也就是说想实现进程间的通信,前提必须是在synchronized同步块或者方法中实现。

实现互斥同步机制,Java提供了两种方法。内置锁synchronized和显示锁Lock,所以线程间通信也有两种方式。
第一种方式是基于内置锁,通过Object对象提供的wait()方法以及notify()/notifyAll()方法实现。
第二种方式是基于显示锁,通过Condition对象的await()方法和signal()/signaAll()方法。

内置锁——线程间通信

wait():如果当前线程在等待某个条件发生变化之后,才能继续执行,但是触发条件发生变化,超出了当前线程的能力。通常需要另外一个线程来改变这种条件的时候,就需要考虑使用wait()方法,将当前线程挂起,等待条件的改变。

比如想把盘子由清洗状态改为烘干状态,必须由烘干线程完成。只有烘干线程才知道烘干操作什么时候完成。

当调用wait()方法将当前挂起之后,只有在notify()或者notifyAll()方法发生时,这个任务才会被唤醒,继续执行。

wait()方法提供了两种使用形式,第

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章