您的位置:首页 > 编程语言 > Java开发

java线程(生产者/消费者)

2015-12-19 10:25 351 查看
import
java.util.ArrayList;
import
java.util.List;
[align=left]
[/align]
[align=left]/**[/align]
[align=left] * 消费者/生产者模式 问题:[/align]
[align=left] *  1.一个共同容量确定的仓库,[/align]
[align=left] *  2.生产者只管生产物品放到仓库,若仓库库满则等待,若库未满,继续生产放入,[/align]
[align=left] *  3.消费者只管从仓库区物品,若库空则等待,若库未空,则取[/align]
[align=left] *  4.消费者和生产者,相互不关联[/align]
[align=left] *[/align]
[align=left] * 代码: 1.创建物品类 2.容量一定的仓库类(存取) 3.消费者类(继承Thread) 4.生产者类(继承Thread)[/align]
[align=left] *[/align]
[align=left] */[/align]

[align=left]
[/align]
[align=left]// 物品类[/align]
class
Goods {
     public 
int
id;
   
public
Goods(){};
     public
Goods(int
id) {
           
this.
id=
id;
[align=left]     }[/align]
[align=left]
[/align]
     public
String toString() {
           
return
"goods"
+
id;
[align=left]     }[/align]
[align=left]}[/align]

[align=left]
[/align]
[align=left]
[/align]
[align=left]// 仓库(物品类)[/align]
class
Store {
[align=left]     //用于存放goods的集合[/align]
     private
Goods[]
lst=
new
Goods[5];
     int
index=0;
[align=left]     //仓库容量的确定[/align]
[align=left]     //放[/align]
     public
synchronized
void
put(Goods
goods) {
           System.
out.println(
"put"+
goods.
id);
           
while(
index==
lst.
length){
                
try
{
                     
this.wait();
                }
catch
(InterruptedException
e) {
                     
//
TODO
Auto-generated catch block
                     
e.printStackTrace();
[align=left]                }    [/align]
[align=left]           }[/align]
           
this.notify();
           
lst[
index]=
goods;
           
index++;   
[align=left]     }[/align]
[align=left]     //取[/align]
     public
synchronized
Goods take(){    
           
while(
index==0){
                
try
{
                     
this.wait();
                }
catch
(InterruptedException
e) {
                     
//
TODO
Auto-generated catch block
                     
e.printStackTrace();
[align=left]                }[/align]
[align=left]           }[/align]
           
index--;
           
this.notify();
           
return
lst[
index];
[align=left]           [/align]
[align=left]     }[/align]
[align=left]}[/align]

[align=left]
[/align]
[align=left]//生产者[/align]
class
Producer
extends
Thread{
     private
Store
store;
     public
void
setStore(Store
store){
           
this.
store=
store;
[align=left]     }[/align]
[align=left]     @Override[/align]
     public
void
run() {
           
//生产物品
                  
for(
int
i=0;
i<30;
i++){    
                     Goods
g=
new
Goods(
i);
                   
store.put(
g);
[align=left]                   }       [/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]}[/align]

[align=left]
[/align]
[align=left]//消费者[/align]
class
Consumer
extends
  Thread {
     private
Store
store; 
     public
void
setStore(Store
store){
           
this.
store=
store;
[align=left]     }[/align]
[align=left]     @Override[/align]
     public
void
run() {
[align=left]     [/align]
           
for(
int
i=0;
i<30;
i++){
[align=left]
[/align]
                System.
out.println(
"take"+
store.take().
id);
[align=left]     [/align]
[align=left]        }[/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]}[/align]

//测试
[align=left]class  ProduceConsume {[/align]
[align=left]     [/align]
[align=left]     [/align]
     public
static
void
main(String[]
args) {
         Store
store=
new
Store();
           Producer
producer=
new
Producer();
           Consumer
consumer=
new
Consumer();
           
producer.setStore(
store);
           
consumer.setStore(
store);
           
producer.start();
           
consumer.start();    
[align=left]     }[/align]
[align=left]     [/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程