blockingdeque java_Java BlockingDeque解决生产者与消费者问题
BlockingDeque解決生產(chǎn)者與消費(fèi)者問(wèn)題的代碼如下:
import?java.util.concurrent.BlockingDeque;
import?java.util.concurrent.LinkedBlockingDeque;
/**
*?@from?www.ityuan.com
*?@Description:BlockingDeque解決生產(chǎn)者與消費(fèi)者問(wèn)題
*/
class?Producer?implements?Runnable?{
private?String?name;
private?BlockingDeque deque;
public?Producer(String?name,?BlockingDeque deque)?{
this.name?=?name;
this.deque?=?deque;
}
public?synchronized?void?run()?{
for?(int?i?=?0;?i?
try?{
deque.putFirst(i);
System.out.println(name?+?"?已生產(chǎn),編號(hào):?"?+?i);
Thread.sleep(300);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
}
class?Consumer?implements?Runnable?{
private?String?name;
private?BlockingDeque deque;
public?Consumer(String?name,?BlockingDeque deque)?{
this.name?=?name;
this.deque?=?deque;
}
public?synchronized?void?run()?{
while?(true)?{
try?{
int?j?=?deque.takeLast();
System.out.println(name?+?"?已消費(fèi),編號(hào)?"?+?j);
if?(j?==?8)?{
System.out.println("已吃到了編號(hào)"+j+"的面包,飽了,后面的不打算吃了,停止消費(fèi)嘍");
break;
}
Thread.sleep(300);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
}
public?class?BlockingDequeTester?{
public?static?void?main(String[]?args)?{
//?定義隊(duì)列的長(zhǎng)度為3。例如一個(gè)碗最多只能放6個(gè)面包。如果不吃的話(huà),其他的面包放不進(jìn)來(lái)
BlockingDeque deque?=?new?LinkedBlockingDeque(6);
Runnable?producer?=?new?Producer("面包",?deque);
Runnable?consumer?=?new?Consumer("面包",?deque);
//?開(kāi)始生產(chǎn)面包
new?Thread(producer).start();
try?{
Thread.sleep(300);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
//?開(kāi)始消費(fèi)面包
new?Thread(consumer).start();
}
}
執(zhí)行結(jié)果如下:
面包?已生產(chǎn),編號(hào):?0
面包?已生產(chǎn),編號(hào):?1
面包?已消費(fèi),編號(hào)?0
面包?已生產(chǎn),編號(hào):?2
面包?已消費(fèi),編號(hào)?1
面包?已生產(chǎn),編號(hào):?3
面包?已消費(fèi),編號(hào)?2
面包?已生產(chǎn),編號(hào):?4
面包?已消費(fèi),編號(hào)?3
面包?已生產(chǎn),編號(hào):?5
面包?已消費(fèi),編號(hào)?4
面包?已生產(chǎn),編號(hào):?6
面包?已消費(fèi),編號(hào)?5
面包?已生產(chǎn),編號(hào):?7
面包?已消費(fèi),編號(hào)?6
面包?已生產(chǎn),編號(hào):?8
面包?已消費(fèi),編號(hào)?7
面包?已生產(chǎn),編號(hào):?9
面包?已消費(fèi),編號(hào)?8
已吃到了編號(hào)8的面包,飽了,后面的不打算吃了,停止消費(fèi)嘍
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的blockingdeque java_Java BlockingDeque解决生产者与消费者问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java exec 空格_java ex
- 下一篇: Java实现大数乘法_java实现大数加