java

位置:IT落伍者 >> java >> 浏览文章

Java线程;生产消费者例子


发布日期:2024年04月03日
 
Java线程;生产消费者例子

小小回顾写了个简单的demo项目中没有过 还能记得纪念一下

产品的entity

Java代码

public class Product {

//产品名称

private String name;

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

}

生产者

Java代码

/**

* 生产者

* @author 饭香

*

*/

public class Producer implements Runnable{

private Shop shop;//要去送货的商店

public Producer(Shop shop){

thisshop=shop;

}

public void run() {

for(int i=;i<;i++){

shopprodu();

}

}

}

消费者

Java代码

/**

* 消费者

* @author 饭香

*

*/

public class Cousumer implements Runnable{

private Shop shop;//要去消费的商店

public Cousumer(Shop shop){

thisshop=shop;

}

public void run() {

for(int i=;i<;i++){//消费

usu();

}

}

}

模拟商店(一切围绕商店商店只能有一个产品随便多个实例这个也是别人问我总是出错的地方对象思想)

Java代码

import javautilArrayList;

import javautilList;

/**

* 模拟商店 (进货/销售)

* @author fx

*

*/

public class Shop {

private static int i=;

//产品的容器;达到容器暂停生产消费到等待生产

private static List<Product> list;

static{

list= new ArrayList<Product>();

}

/**

* 生产产品

*/

public synchronized void produ(){

if(listsize()>=){

try {

Systemoutprintln(生产商品+i+达到了总数暂停生产);

thiswait();//进入休眠

} catch (InterruptedException e) {

Systemoutprintln(etoString());

e=null;

}

} //生产商品

Product product= new Product();

productsetName(商品+i);

listadd(product);

Systemoutprintln(生产了商品>+productgetName()+商品总数+i);

Systemoutprintln(容器容量+listsize());

i++;

supernotify();

}

/**

* 消费产品

* @return

*/

public synchronized void cousu(){

if(listsize()==){//消费完时挂起

Systemoutprintln(+++++++++++++++++++++++商品消费完了等待+++++++++++++++=);

try {

thiswait();

} catch (InterruptedException e) {

// TODO Autogenerated catch block

Systemoutprintln(etoString());

e=null;

}

}

Product product=listget();

listremove();

Systemoutprintln(消费了获得了商品>+productgetName());

Systemoutprintln(容器容量+listsize());

supernotify();

}

}

测试代码

Java代码

public static void main(String[] args) {

Shop shop=new Shop();//商店

Producer pro=new Producer(shop);

Cousumer cou = new Cousumer(shop);

new Thread(propro)start();

new Thread(coucou)start();

}

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

+++++++++++++++++++++++商品消费完了等待+++++++++++++++=

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

+++++++++++++++++++++++商品消费完了等待+++++++++++++++=

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

+++++++++++++++++++++++商品消费完了等待+++++++++++++++=

生产了商品>商品商品总数

容器容量

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

生产了商品>商品商品总数

容器容量

消费了获得了商品>商品

容器容量

消费了获得了商品>商品

容器容量

               

上一篇:Java开源UML建模

下一篇:实战体会Java多线程编程的精要