基于wait和notify的生产者消费者实例
2015-05-29 15:45
363 查看
package com.test; public class WaitNotify { private final int CAPACITY = 10; private volatile int size = 0; private final Object lock = new Object(); public void Consumer(){ synchronized (lock) { while(size <= 0){ System.out.println("consumer wait"); try { lock.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } size --; System.out.println("Consume a product, size:"+size); lock.notify(); } } public void Productor(){ synchronized (lock) { while(size == CAPACITY){//read System.out.println("productor wait"); try { lock.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } size ++; System.out.println("Produce a product, size:"+size); lock.notify(); } } public static void main(String[] args) { WaitNotify waitNotify = new WaitNotify(); for(int i=0;i<2;i++){ new Thread(()->{while(true)waitNotify.Consumer();}).start(); } for(int i=0;i<2;i++){ new Thread(()->{while(true)waitNotify.Productor();}).start(); } for(int i=0;i<111;i++){ new Thread(()->{waitNotify.Productor();}).start(); } for(int i=0;i<111;i++){ new Thread(()->{waitNotify.Consumer();}).start(); } } }
相关文章推荐
- Contains Duplicate II
- [AIX] ksh中的命令行编辑
- leetcode 219: Contains Duplicate II
- Common realloc mistake: 'd_data' nulled but not freed upon failure
- [LeetCode] Contains Duplicate & Contains Duplicate II
- 5分钟学会AIDL
- [LeetCode]Contains Duplicate II
- Minimum Average Waiting Time
- make_pair
- golang 的 sync.WaitGroup
- 捕获fail2ban截获的Ip写入拒绝主机列表
- ArtifactTransferException: Failure to transfer xalan:xalan:jar:2.6.0 from http://repo.maven.apache.o
- AIX telnet: connect: Cannot reach the destination network.
- DNA repair问题
- SSH远程连接报错:Could not connect to '10.43.2.113' (port 22): Connection failed.
- leetcode--Contains Duplicate
- Postfix maillog邮件发送各阶段延时的日志记录
- JetBrain WebStorm 注册码
- naive bayes
- To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.