博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java线程:生产者消费者模型
阅读量:5937 次
发布时间:2019-06-19

本文共 1813 字,大约阅读时间需要 6 分钟。

public 
class ProduceConsume {
 
/*
  *@param 生产消费程序
  * @author wenhaibo
  
*/
 
public 
static 
void main(String[] args) {
  Container container=
new Container();
  Producer p=
new Producer(container);
  Consumer c=
new Consumer(container);
  
new Thread(p).start();
  
new Thread(c).start();
 }
}
class Food{
 
//
标记食物ID
 
int id;
 Food(
int id){
  
this.id=id;
 }
 
public String toString(){
  
return 
"
食物 id :
"+id;
 }
}
class Container{
 
//
为容器定义下标值和容量
 
int index=
0;
 Food[] arryfood=
new Food[
10];
  
//
提供往容器仍食物的方法
 
public synchronized 
void still(Food food){
  
if(index==arryfood.length){
   
try {
    
this.wait();
   } 
catch (InterruptedException e) {
    
//
 TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
this.notify();
  arryfood[index]=food;
  index++;
 }
 
//
提供往容器拿食物的方法
 
public synchronized Food hold(){
  
if(index==
0){
   
try {
    
this.wait();
   } 
catch (InterruptedException e) {
    
//
 TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
this.notify();
  index--;
  
return arryfood[index];  
 }
}
class Producer implements Runnable{
 
//
 生产者生产食物
 Container container=
null;
 
public Producer(Container container) {
  
//
提供装食物的容器
  
this.container=container;
 }
 
public 
void run() {
 
//
开始生产食物放进容器里
  
for(
int i=
0;i<
20;i++){
   Food food=
new Food(i);
   container.still(food);
   System.
out.println(
"
生产了 :
"+food);
   
try {
    Thread.sleep(
100);
   } 
catch (InterruptedException e) {
    
//
 TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
}
class Consumer implements Runnable{
 
//
消费者消费食物
 Container container=
null;
 Consumer(Container container){
  
this.container=container;
 }
 
public 
void run() {
  
//
 开始消费食物
  
for(
int i=
0;i<
20;i++){
   Food food=container.hold();
   System.
out.println(
"
消费了 :
"+food);
   
try {
    Thread.sleep(
1000);
   } 
catch (InterruptedException e) {
    
//
 TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 
}

转载于:https://www.cnblogs.com/alamps/archive/2012/10/23/2736351.html

你可能感兴趣的文章
查看linux版本
查看>>
[Django学习] Django基础(6)_Field lookups
查看>>
find 命令练习
查看>>
Spring第一部分
查看>>
nova image-list 和 glance image-list 有什么区别
查看>>
导航栏4种效果---原生js
查看>>
同源策略引发对跨域jsonp跨域的理解
查看>>
PAT1138 Postorder Traversal(树的遍历)
查看>>
I.MX6 ifconfig: SIOCSIFHWADDR: Cannot assign requested address
查看>>
CAS与MVC集成下的“循环重定向”分析
查看>>
稀疏向量的一些内容
查看>>
使用grunt实现web自动化
查看>>
事件委托(代理)
查看>>
使用JavaScript获取CSS伪元素属性
查看>>
正则化
查看>>
javascript弹窗
查看>>
结对编程项目作业2-结对编项目设计文档
查看>>
百度地图实现思路--------未实践------未验证
查看>>
final域的内存语义
查看>>
C++链接两个cpp 文件
查看>>