《多线程编程》学习之七:等待/通知机制(二)

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值