多线程模拟生产者消费者示例之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是一个阻塞的有界队列,可以直接使用它.
多线程模拟生产者消费者示例之BlockQueue的更多相关文章
- 多线程模拟生产者消费者示例之Lock
public class Test { public static void main(String[] args) { List<String> list = new ArrayList ...
- 多线程模拟生产者消费者示例之wait/notify
public class Test { public static void main(String[] args) throws InterruptedException { List<Str ...
- java多线程模拟生产者消费者问题,公司面试常常问的题。。。
package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ...
- java多线程解决生产者消费者问题
import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ...
- 【多线程】--生产者消费者模式--Lock版本
在JDK1.5发布后,提供了Synchronized的更优解决方案:Lock 和 Condition 我们使用这些新知识,来改进例子:[多线程]--生产者消费者模式--Synchronized版本 改 ...
- Android-Java多线程通讯(生产者 消费者)&10条线程对-等待唤醒/机制的管理
上一篇博客 Android-Java多线程通讯(生产者 消费者)&等待唤醒机制 是两条线程(Thread-0 / Thread-1) 在被CPU随机切换执行: 而今天这篇博客是,在上一篇博客A ...
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...
- Java多线程_生产者消费者模式2
在我的上一条博客中,已经介绍到了多线程的经典案列——生产者消费者模式,但是在上篇中用的是传统的麻烦的非阻塞队列实现的.在这篇博客中我将介绍另一种方式就是:用阻塞队列完成生产者消费者模式,可以使用多种阻 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
随机推荐
- MySQL部分索引
部分索引 char/varchar2太长,全部做索引的话,效率低,浪费存储空间 select avg(length(username)) from 索引统计: show index from tabl ...
- SHELL脚本里执行的东西需要多次回车确认,怎么实现自动回车确认?
写了个自动配置的shell脚本,其中有几行是 …… ./build-key-server ./build-key-client …… 在执行build-key-server和build-key-cli ...
- Vagrant 手册之网络 - 端口转发
原文地址 Vagrantfile 配置文件中端口转发的网络标识符:forwarded_port,例如: config.vm.network "forwarded_port", gu ...
- 下载工具 qBittorrent 使用
官网地址,软件可以在官网上下载. GitHub 源码 知乎的参考链接 qBittorrent 是开源软件,支持用 BT 种子或种子的链接下载,也可以用磁力链接进行下载. 搜索功能 qBittorren ...
- Spring MVC浅析
讲到MVC,想必大家都很熟悉,就是将数据模型.视图.控制器进行分离,做到分工明确,在Spring的帮助下,Spring MVC 更是做到了充分的解耦,因为大部分的资源都由Spring进行管理,为Spr ...
- 有用的官方API和官网
1.Bootstrap API:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 2.百度地图API示例:http://lbsyun.ba ...
- HTML5-autio、video视频音频
完整版视屏web播放器: 基本autio和ideo介绍 <!DOCTYPE html> <html lang="en"> <head> < ...
- 基于vux的Vue路由切换动画
const history = window.sessionStorage history.clear() let historyCount = history.getItem('count') * ...
- .net 学习官网
https://docs.microsoft.com
- P2172 [国家集训队]部落战争(最小路径覆盖)
P2172 [国家集训队]部落战争 每个点仅走一次:最小路径覆盖 套路地拆点,具体看代码中的$draw()$ 流量每增加1,意味着一支军队可以多走一格,代价减少1 最后答案即为总点数$-dinic() ...