wait/notifyAll实现生产者消费者模型仿真
2015-07-22 20:46
399 查看
package webapp; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ExploreWait { public static void addProducer(ExecutorService exec, List<String> list) { exec.execute(new Runnable() { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { synchronized (list) { while (list.size() == 10) { try { System.out.println("please wait to produce..."); list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } int size = list.size(); Date d = new Date(); String rs = "produced at:[" + d + "],[size=" + (size + 1) + "]"; list.add(rs); System.out.println(rs); list.notifyAll(); } Thread.yield(); } } }); }; public static void addConsumer(ExecutorService exec, List<String> list) { // consumer exec.execute(new Runnable() { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { synchronized (list) { while (list.size() == 0) { try { System.out.println("please wait to consume..."); list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } String str = ((LinkedList<String>)list).pollFirst(); System.out.println("consumed at[" + new Date() + "],comsumed:" + str + ",current size" + list.size()); list.notifyAll(); } Thread.yield(); } } }); }; public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); List<String> list = new LinkedList<>(); addProducer(exec, list); addConsumer(exec, list); addProducer(exec, list); addConsumer(exec, list); try { TimeUnit.SECONDS.sleep(3); System.exit(0); } catch (InterruptedException e) { e.printStackTrace(); } } }
相关文章推荐
- 2015 Multi-University Training Contest 1 Hdu5295 unstable
- hdu 5293 Tree chain problem(15多校第一场1006)(树形dp+树状数组+LCA)
- hdoj 1151 Air Raid
- (中等) HDU 5293 Tree chain problem,树链剖分+树形DP。
- HDU 2476 String painter
- 请求主资源(mainResource)的堆栈
- Table 9-5 -- coeff_token mapping to TotalCoeff(coeff_token) and TrailingOnes(coeff_token)
- Doing Homework again(区间选点)
- VMware虚拟机安装MAC OS X Mountain Lion详细图文教程
- zoj 2193 Window Pains
- zoj 2193 Window Pains
- HDU 1789 Doing Homework again
- spark-client 一直 accepted,无法提交任务,报错Failed to connect to driver at
- Linux内核中RAID5源码详解之基本架构与数据结构
- SVN Commit Failed Transaction is out of date问题
- an error has occurred.See error log for more details
- hdu5293(2015多校1)--Tree chain problem(树状dp)
- AICL(Auto Input Current Limited)
- 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
- Responder Chain 响应者链总结