zoukankan      html  css  js  c++  java
  • 多线程模拟生产者消费者示例之BlockQueue

    public class Test {
    public static void main(String[] args){
    //创建一个阻塞队列,边界为1
    BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1);
    new Thread(new PThread(queue)).start();
    new Thread(new CThread(queue)).start();
    }
    }

    /**
    * 生产者
    */
    class PThread implements Runnable {
    private BlockingQueue<String> queue;
    private AtomicInteger count = new AtomicInteger();

    public PThread(BlockingQueue<String> queue) {
    this.queue = queue;
    }

    @Override
    public void run() {
    while (true) {
    String data = count.getAndIncrement() + "";
    System.out.println("生产数据:"+data);
    try {
    queue.put(data);
    Thread.sleep(2000);//sleep,便于观察
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    }
    }

    /**
    * 消费者
    */
    class CThread implements Runnable {
    private BlockingQueue<String> queue;

    public CThread(BlockingQueue<String> queue) {
    this.queue = queue;
    }

    @Override
    public void run() {
    while (true) {
    try {
    String data = queue.take();
    System.out.println("消费数据:"+data);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }


    因为ArrayBlockingQueue是一个阻塞的有界队列,可以直接使用它.

  • 相关阅读:
    鼠标移向小图显示大图
    一个简单漂亮的CSS相册代码
    windows 应该关闭服务
    NetBIOS名称
    DOS命令大全(经典收藏)
    大揭露:Win中也有各种不老实的服务
    变量名
    ASP.NET2.0 GridView小技巧汇粹 (转)
    Dfs实战技术
    windows 2003中活动目录支持文件
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/9728842.html
Copyright © 2011-2022 走看看