package thread.example;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantLock;/*** 仓库** @author ZwT* @date 2018年05月22日 11:16**/public class Storage {/*最大仓库量*/private static final int MAX_SIZE = 100;private int currentSize = 0;private Lock lock;/*生产条件*/private Condition _save;/*消费条件*/private Condition _draw;public Storage(Lock lock) {this.lock = lock;_save = lock.newCondition();_draw = lock.newCondition();}/*生产*/public void production(int count) {lock.lock();/*判断是否需要生产*/try {while (count + currentSize > MAX_SIZE) {/*等待*/_save.await();}currentSize += count;/*通知唤醒*/_draw.signalAll();System.out.println(Thread.currentThread().getName() + "--生产了:" + count + "--当前库存:" + currentSize);}catch (InterruptedException e) {e.printStackTrace();}finally {lock.unlock();}}/*消费*/public void consume(int count) {lock.lock();/*判断是否可以消费*/try {while (count > currentSize) {/*等待*/_draw.await();}currentSize -= count;/*通知唤醒*/_save.signalAll();System.out.println(Thread.currentThread().getName() + "--消费了:" + count + "--当前库存:" + currentSize);}catch (InterruptedException e){e.printStackTrace();} finally {lock.unlock();}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。