多线程之生产者消费者问题
2015-09-07 19:07
260 查看
package org.thread.cn; public class Store{ private final int MAX_SIZE; private int count; public Store(int n){ MAX_SIZE=n; count=0; } public synchronized void add(){ while(count>=MAX_SIZE){ System.out.println("store 已满"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } count++; System.out.println(Thread.currentThread().toString()+" put "+count); this.notifyAll(); } public synchronized void remove(){ while(count<=0){ System.out.println("store is empty"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(Thread.currentThread().toString()+" get "+count); count--; this.notify(); } public static void main(String[] args) { Store s=new Store(5); Thread pro1=new Producer(s); Thread pro2=new Producer(s); Thread con1=new Consumer(s); Thread con2=new Consumer(s); pro1.setName("Producer"); pro2.setName("Producer2"); con1.setName("consumer"); con2.setName("consumer2"); pro1.start(); pro2.start(); con1.start(); con2.start(); } } class Producer extends Thread{ private Store s; public Producer(Store s) { // TODO Auto-generated constructor stub this.s=s; } @Override public void run() { // TODO Auto-generated method stub while(true){ s.add(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Consumer extends Thread{ private Store s; public Consumer(Store s){ this.s=s; } @Override public void run() { // TODO Auto-generated method stub while(true){ s.remove(); try { Thread.sleep(1500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }关于ThreadLocal:ThreadLocal
相关文章推荐
- fully connected layer as 1x1 convolution
- new/delete 和malloc/free 的区别一般汇总
- 函数调用栈
- C基础知识进阶(上)
- 2014年系统架构师真题和分析
- windows平台android环境搭建
- 1082. Read Number in Chinese (25)
- iOS开发 - GCD
- Nginx提供网站服务应用包括(虚拟主机、用户访问控制、用户验证、nginx平滑升级、防盗链)的配置
- Contiki 调度内核不完全介绍
- Android gradle 编译 MultiDex
- UIday1001:UITableView 2 编辑(添加、删除)、移动、UITableViewController
- N个状态在数据库中的简便使用定义方式
- android菜鸟进阶之路——应用程序里嵌入网页
- 博文收藏,便于后续重温
- 2016腾讯测试开发岗笔试编程第一题
- Android获取内存信息
- 1081. Rational Sum (20)
- 约瑟夫环问题
- Java CMS垃圾收集器几个过程