线程间的通信:其实就是多个线程在操作同一个资源,但是操作的动作不同
当某个线程进入synchronized块后,共享数据的状态不一定满足该线程的需要,需要其他线程改变共享数据的状态后才能运行,而由于当时线程对共享资源时独占的,它必须解除对共享资源的锁定的状态,通知其他线程可以使用该共享资源。
Java中的 wait(),notify(),notifyAll()可以实现线程间的通信。
生产者–消费者问题是典型的线程同步和通信问题
- 生产者生产出产品,消费者去购买产品
- 创建三个线程,一个主控线程,一个生产者线程,一个消费者线程,
- 创建一个堆栈 Stack,生成线程生成的产品放置到堆栈中,然后消费者线程在堆栈中取走产品
【实际问题】异步实现字符串的拼接
设定条件如下:
有两个线程,Producer线程负责字符串的读取,Consumer线程负责字符串的拼接,当输入字符串开头为‘0’时,退出Producer和Consumer线程,并将拼接后的字符串打印出来。
[例]
输入:
My country↓
is ↓
awesome↓
0↓
输出:
My country is awesome
/**
* 创建一个堆栈 Stack,生产者线程生成的产品放置到堆栈中,然后消费者线程在堆栈中取走产品
* Created by ZhangJun on 2017/10/21.
*/
publ