导航:首页 > 编程语言 > 消费者生产者问题java

消费者生产者问题java

发布时间:2025-08-28 20:54:59

java多线程关于消费者和生产者,求源程序,求大神解答。愿意提高报酬

自己看代码体会吧

importjava.util.concurrent.BlockingQueue;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjava.util.concurrent.LinkedBlockingQueue;

publicclassBlockingQueueTest{
publicstaticvoidmain(String[]args){
ExecutorServiceservice=Executors.newCachedThreadPool();
BlockingQueue<String>blockingQueue=newLinkedBlockingQueue<String>(100);
System.out.println("blockingQueuenowcontains"+blockingQueue.size()+"unit");
service.submit(newConsumer1(blockingQueue));
gap(blockingQueue);
service.submit(newProctor2(blockingQueue));
gap(blockingQueue);
service.submit(newProctor3(blockingQueue));
gap(blockingQueue);
service.submit(newProctor4(blockingQueue));
gap(blockingQueue);
service.submit(newProctor5(blockingQueue));
gap(blockingQueue);

service.shutdown();
}
privatestaticvoidgap(BlockingQueue<String>blockingQueue){
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("blockingQueuenowcontains"+blockingQueue.size()+"unit");
}
}
{
BlockingQueue<String>blockingQueue;

publicConsumer1(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Consumer1start:need10units");
for(inti=0;i<10;i++){
try{
blockingQueue.take();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Consumer1end:hasgot10units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor2(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor2start:put5units");
for(inti=0;i<5;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor2end:hasput5units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor3(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor3start:put5units");
for(inti=0;i<5;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor3end:hasput5units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor4(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor4start:put100units");
for(inti=0;i<100;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor4end:hasput100units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor5(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor5start:put10units");
for(inti=0;i<100;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor5end:hasput10units");
}

}

每个线程是隔了1s启动的, 结果

blockingQueue now contains 0 unit
Consumer1 start: need 10 units
blockingQueue now contains 0 unit
Proctor2 start: put 5 units
Proctor2 end: has put 5 units
blockingQueue now contains 0 unit
Proctor3 start: put 5 units
Proctor3 end: has put 5 units
Consumer1 end: has got 10 units
blockingQueue now contains 0 unit
Proctor4 start: put 100 units
Proctor4 end: has put 100 units
blockingQueue now contains 100 unit
Proctor5 start: put 10 units
blockingQueue now contains 100 unit

⑵ Java中notify和notifyAll的区别

notify方法只唤醒一个等待(对象的)线程并使该线程开始执行。所以如果有多个线程等待一个对象李逗,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对哪肢卖多线程管理的实现。notifyAll 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现。这些方法可以使用于“生产者-消费者”问题,消费者是在队列中等待对象的线程,生产者是在队列中释饥冲放对象并通知其他线程的线程。

阅读全文

与消费者生产者问题java相关的资料

热点内容
备份与加密 浏览:623
用什么app可以看论坛 浏览:52
javajdbcmysql连接 浏览:469
制作linux交叉编译工具链 浏览:751
编程负数除以正数 浏览:510
app和aso有什么区别 浏览:326
手机vmap是什么文件夹 浏览:36
塔科夫锁服如何选择服务器 浏览:290
消费者生产者问题java 浏览:61
程序员筱柒顾默结婚的时候 浏览:577
安卓截长屏怎么弄 浏览:474
优信办理解压手续怎么那么慢 浏览:604
私有云服务器一体机安全吗 浏览:429
python的tk界面禁用鼠标 浏览:185
怎么看服务器mac地址 浏览:291
安卓如何将图镜像翻转 浏览:325
操作系统设计与实现pdf 浏览:547
长虹空调遥控什么app 浏览:739
四轴外圆编程教程 浏览:947
vb在线编译环境 浏览:886