阻塞队列入门2
来源:互联网 发布:node v7.0.0 x64.msi 编辑:程序博客网 时间:2024/06/01 10:08
1.一个例子
- 用两个具有1个空间的队列来实现同步通知的功能
- 两个线程,你一下我一下,你来我往
- 以前写过一个类似的
- 用阻塞队列来实现这个功能
2.分析
3.实例
public class BlockingQueueCommunication { public static void main(String[] args) { Business business = new Business(); new Thread(new Runnable() { @Override public void run() { for(int i=1;i<=50;i++) { business.sub(i); } } }).start(); for(int i=1;i<=50;i++) { business.main(i); } } static class Business{ BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1); BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1); {//匿名构造方法,对象创建几次就调用几次 try { queue2.put(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void sub(int i) { try { queue1.put(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(int j=1;j<=10;j++) { System.out.println("sub thread sequece of "+j+",loop of "+i); } try { queue2.take(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void main(int i) { try { queue2.put(1); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(int j=1;j<=100;j++) { System.out.println("main thread sequece of "+j+",loop of "+i); } try { queue1.take(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}
- 为什么用匿名构造方法,而不用静态代码块?
- 用静态代码块是不能创建对象的
- 静态代码块是运行类加载之后运行一次
- 而匿名构造方法运行是在所有的构造方法之前
阅读全文
0 0
- 阻塞队列入门2
- 阻塞队列入门
- 阻塞队列--详解2
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 阻塞队列
- 新技术,新挑战,新能力:金融+AI 的产品实践
- 解决Xshell关闭vim后内容仍停留在屏幕的问题
- 写了10篇产品分析后,我似乎知道怎么做一款短视频产品了……
- 你说我是佛系运营,而我身上却有你的影子
- 写文案痛苦、写出的文案不能产生价值?这里有方法,4周炼成文案高手
- 阻塞队列入门2
- 简单搜索模板
- Leetcode 413. Arithmetic Slices(算法分析week15)
- USB协议介绍[1]-基础知识
- stm32 IO操作备注
- Druid----DruidDataSource源码解析
- 深度强化学习的18个关键问题
- lnmp一键安装之后无法删除虚拟主机的文件夹
- OpenglES 从鱼眼图到全景图坐标计算