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