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

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

生活随笔

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

编程问答

java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

發(fā)布時(shí)間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.LinkedBlockingQueue;

/**

* Created with IntelliJ IDEA.

* User: csx

* Date: 4/24/14

* Time: 9:56 AM

* To change this template use File | Settings | File Templates.

*

* 生產(chǎn)者與消費(fèi)者模型中,要保證以下幾點(diǎn):

* 1 同一時(shí)間內(nèi)只能有一個(gè)生產(chǎn)者生產(chǎn)

* 2 同一時(shí)間內(nèi)只能有一個(gè)消費(fèi)者消費(fèi)

* 3 生產(chǎn)者生產(chǎn)的同時(shí)消費(fèi)者不能消費(fèi)

* 4 消費(fèi)者消費(fèi)的同時(shí)生產(chǎn)者不能生產(chǎn)

* 5 共享空間空時(shí)消費(fèi)者不能繼續(xù)消費(fèi)

* 6 共享空間滿時(shí)生產(chǎn)者不能繼續(xù)生產(chǎn)

*

* 使用并發(fā)庫(kù)中的BlockingQueue(阻塞隊(duì)列) 實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者

*/

public class WaitNoticeDemo {

public static void main(String[] args) {

//固定容器大小為10

BlockingQueue foods = new LinkedBlockingQueue(10);

Thread produce = new Thread(new Produce(foods));

Thread consume = new Thread(new Consume(foods));

produce.start();

consume.start();

}

}

/**

* 生產(chǎn)者

*/

class Produce implements Runnable{

private BlockingQueue foods;

Produce(BlockingQueue foods) {

this.foods = foods;

}

@Override

public void run() {

int i = 0;

while (true){

try {

//當(dāng)生產(chǎn)的食品數(shù)量裝滿了容器,那么在while里面該食品容器(阻塞隊(duì)列)會(huì)自動(dòng)阻塞 ?wait狀態(tài) 等待消費(fèi)

foods.put(new Food("食品"+i));

i++;

} catch (InterruptedException e) {

e.printStackTrace(); ?//To change body of catch statement use File | Settings | File Templates.

}

}

}

}

/**

* 消費(fèi)者

*/

class Consume implements Runnable {

private BlockingQueue foods;

Consume(BlockingQueue foods){

this.foods = foods;

}

@Override

public void run() {

try {

Thread.sleep(1000); ?//用于測(cè)試當(dāng)生產(chǎn)者生產(chǎn)滿10個(gè)食品后是否進(jìn)入等待狀態(tài)

while (true){

//當(dāng)容器里面的食品數(shù)量為空時(shí),那么在while里面該食品容器(阻塞隊(duì)列)會(huì)自動(dòng)阻塞 ?wait狀態(tài) 等待生產(chǎn)

Food food = foods.take();

System.out.println("消費(fèi)"+food.getName());

}

} catch (InterruptedException e) {

e.printStackTrace(); ?//To change body of catch statement use File | Settings | File Templates.

}

}

}

/**

* 食品

*/

class Food{

private String name;

String getName() {

return name;

}

Food(String name){

this.name = name;

System.out.println("生產(chǎn)"+name);

}

}

如有不足 還請(qǐng)大家留言糾正修改。

總結(jié)

以上是生活随笔為你收集整理的java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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