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

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

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

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

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

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

内置锁——线程间通信

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

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

你可能感兴趣的:(并发编程,java,多线程,并发编程)