日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/9/27 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生产者消费者 demo_生产者与消费者--demo1---bai 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

//自定義類,描述倉庫

public class StoreHouse

{

private List products = new ArrayList(); //倉庫的所有商品的列表

public void add(String product)

{

this.products.add(product);

}

Random rd = new Random();

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

{

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

//從數組中,刪除序號為index的商品。并作為返回值返回。

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

return product;

}

//獲取倉庫的商品個數

public int getSize()

{

return this.products.size();

}

}

import java.util.Random;

//消費者線程。不斷的消費

public class ConsumeThread extends Thread

{

private StoreHouse house;//持有1個倉庫

//構造函數中,傳入倉庫對象

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("倉庫為空,消費者開始等待...");

//如果倉庫為空,則本消費者線程進入等待狀態。會釋放同步鎖。

try {

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

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

//house.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

synchronized (house)

{

if (house.getSize() > 0) //只要倉庫的庫存大于0

{

String product = house.sale();

System.out.println("消費者從倉庫中取走了 " + product);

}

}

try {

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

} catch (InterruptedException e) {

e.printStackTrace();

} //隨機休息2秒以內的時間

}

}

}

import java.util.Random;

//生產者線程。不斷的往倉庫添加商品

public class ProduceThread extends Thread

{

private StoreHouse house;//持有1個倉庫

//構造函數中,傳入倉庫對象

public ProduceThread(StoreHouse house)

{

this.house = house;

}

@Override

public void run()

{

Random rd = new Random();

//不斷的往倉庫添加商品

while(true)

{

synchronized (house)

{

//隨機產生1個商品名

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

//將該商品添加到倉庫

house.add(product);

house.notifyAll();//通知所有其他處于wait狀態的線程繼續執行

System.out.println("生產者將 " + product + " 添加到倉庫中");

}

try {

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

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} //隨機休息2秒以內的時間

}

}

}

public class Test

{

public static void main(String[] args)

{

//1 創建1個倉庫對象,作為共享數據

StoreHouse house = new StoreHouse();

//2 創建生產者線程

ProduceThread pt = new ProduceThread(house);

//3 創建消費者線程

ConsumeThread ct1 = new ConsumeThread(house);

ConsumeThread ct2 = new ConsumeThread(house);

//4 啟動線程

pt.start();

ct1.start();

ct2.start();

}

}

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。