2312;两者之间设置了一ߑ=
0;具有<span
lang=3DEN-US>n</span>个缓冲区的缓ࠫ=
4;池,生产者将它所生&=
#20135;的产品放入一个缓=
914;区中;消费者可以从=
;一个缓冲区中取走产&#=
21697;产生消费。</p>
<p>尽管所有的生产者线=
程和消费者线程都是=
0197;异步方式运行的,߭=
4;他们之间必须保持同&=
#27493;,即不允许消费者=
040;一个空缓冲区去消费=
;,也不允许生产者向&#=
19968;个已经被占用的缓Ñ=
14;区投放产品。</p>
</blockquote>
<p><span lang=3DEN-US> </span></p>
<p>我把这个问题复杂化=
,设立<span
lang=3DEN-US>m</span>个缓冲池,每ߑ=
0;缓冲池都有各自固定&=
#30340;容量,每个生产者=
110;消费者在进行生产消=
;费活动之前,先选择&#=
19968;个缓冲池。由此会ó=
41;发一个线程死锁的问=
题:所有的生产者都=
2312;满的缓冲池等待,௥=
2;到某个消费者取走一&=
#20010;产品,释放出一块 =
531;冲区;同时所有的消=
;费者都在空的缓冲池&#=
31561;待,直到某个生产Ň=
73;放进一个产品。</p>
<p>解决方法:记录每一=
个线程的等待状态,=
2914;果当前线程会产生౔=
1;待,则检测是否会产&=
#29983;死锁(所有线程都=
312;等待),如果会产生=
;死锁,拒绝此次生产&#=
28040;费活动(换一个缓Ñ=
14;池)</p>
<p><span lang=3DEN-US> </span></p>
<p><span lang=3DEN-US style=3D'color:red'>Java Code</span>:</p>
<p><span lang=3DEN-US> </span></p>
<div><pre><span lang=3DEN-US>public class ProducerAndConsumer {//</span>=
0316;者:<span
lang=3DEN-US>xelz</span>,博客<span lang=3DEN-US>http://w=
ww.cnblogs.com/mingcn</span></pre><pre><span
lang=3DEN-US><span style=3D'mso-tab-count:1'> =
</span></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-tab-count:1'> =