日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 生产者消费者 demo_生产者与消费者--demo1---bai

發(fā)布時(shí)間:2024/9/27 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生产者消费者 demo_生产者与消费者--demo1---bai 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

//自定義類,描述倉(cāng)庫(kù)

public class StoreHouse

{

private List products = new ArrayList(); //倉(cāng)庫(kù)的所有商品的列表

public void add(String product)

{

this.products.add(product);

}

Random rd = new Random();

public String sale() //隨機(jī)從所有商品中,任取一件進(jìn)行出售

{

int index = rd.nextInt(this.products.size());

//從數(shù)組中,刪除序號(hào)為index的商品。并作為返回值返回。

String product = this.products.remove(index);

return product;

}

//獲取倉(cāng)庫(kù)的商品個(gè)數(shù)

public int getSize()

{

return this.products.size();

}

}

import java.util.Random;

//消費(fèi)者線程。不斷的消費(fèi)

public class ConsumeThread extends Thread

{

private StoreHouse house;//持有1個(gè)倉(cāng)庫(kù)

//構(gòu)造函數(shù)中,傳入倉(cāng)庫(kù)對(duì)象

public ConsumeThread(StoreHouse house)

{

this.house = house;

}

@Override

public void run() {

Random rd = new Random();

while(true)

{

synchronized (house)

{

if(house.getSize()==0)

{

System.out.println("倉(cāng)庫(kù)為空,消費(fèi)者開(kāi)始等待...");

//如果倉(cāng)庫(kù)為空,則本消費(fèi)者線程進(jìn)入等待狀態(tài)。會(huì)釋放同步鎖。

try {

house.wait(); //釋放同步鎖,其他線程可以繼續(xù)執(zhí)行。

//Thread.sleep(3000);//不釋放同步鎖。所以其他線程無(wú)法繼續(xù)執(zhí)行。

//house.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

synchronized (house)

{

if (house.getSize() > 0) //只要倉(cāng)庫(kù)的庫(kù)存大于0

{

String product = house.sale();

System.out.println("消費(fèi)者從倉(cāng)庫(kù)中取走了 " + product);

}

}

try {

Thread.sleep(rd.nextInt(2000));

} catch (InterruptedException e) {

e.printStackTrace();

} //隨機(jī)休息2秒以內(nèi)的時(shí)間

}

}

}

import java.util.Random;

//生產(chǎn)者線程。不斷的往倉(cāng)庫(kù)添加商品

public class ProduceThread extends Thread

{

private StoreHouse house;//持有1個(gè)倉(cāng)庫(kù)

//構(gòu)造函數(shù)中,傳入倉(cāng)庫(kù)對(duì)象

public ProduceThread(StoreHouse house)

{

this.house = house;

}

@Override

public void run()

{

Random rd = new Random();

//不斷的往倉(cāng)庫(kù)添加商品

while(true)

{

synchronized (house)

{

//隨機(jī)產(chǎn)生1個(gè)商品名

String product = "商品" + rd.nextInt(200);

//將該商品添加到倉(cāng)庫(kù)

house.add(product);

house.notifyAll();//通知所有其他處于wait狀態(tài)的線程繼續(xù)執(zhí)行

System.out.println("生產(chǎn)者將 " + product + " 添加到倉(cāng)庫(kù)中");

}

try {

Thread.sleep(rd.nextInt(2000));

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} //隨機(jī)休息2秒以內(nèi)的時(shí)間

}

}

}

public class Test

{

public static void main(String[] args)

{

//1 創(chuàng)建1個(gè)倉(cāng)庫(kù)對(duì)象,作為共享數(shù)據(jù)

StoreHouse house = new StoreHouse();

//2 創(chuàng)建生產(chǎn)者線程

ProduceThread pt = new ProduceThread(house);

//3 創(chuàng)建消費(fèi)者線程

ConsumeThread ct1 = new ConsumeThread(house);

ConsumeThread ct2 = new ConsumeThread(house);

//4 啟動(dòng)線程

pt.start();

ct1.start();

ct2.start();

}

}

總結(jié)

以上是生活随笔為你收集整理的java 生产者消费者 demo_生产者与消费者--demo1---bai的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。