1、生产者与消费者问题
利用等待/通知机制,实现一生产与一消费:操作栈。生产者向栈中生产数据,消费者从栈中消费数据,栈的最大容量为1。
可见容器的size不会大于1,生产与消费这两个过程交替进行。
2、通过管道进行线程之间的通信
管道流(pipeStream)是一种特殊的流,用于在不同线程之间直接传输数据。一个线程发送数据到输出管道,另一个线程从输入管道中读取数据。java的JDK中提供4个类使线程之间可以进行通信:
a)PipedInputStream和PipedOutputStream
b)PipedReader和PipedWriter
1)工具类:ReadWriteTool.java:
2)读、写字节流线程类:
3)测试:
“读”线程先启动,由于当时没有数据被写入,所以阻塞在input.read(byteArray)方法上,直到有数据被写入,才继续往下执行。
4)读、写字符流线程类:
测试代码改为:(结果与上面的结果是一样的。)
3、等待/通知之交叉备份
情景:创建20个线程,其中10个线程将数据备份到A数据库中,另外10个线程将数据备份到B数据库中,并且备份A数据库与B数据库是交叉进行的。
1)工具类:DBTool.java
2)备份到数据库A、B的线程类:
3)测试:
可见两种打印效果是交替进行的,交替打印的关键是使用如下代码做标志:volatile private boolean preIsA;