使用Lock和Condition 替代 synchronized的 锁和 等待和唤醒
来源:互联网 发布:知善恶树英语 编辑:程序博客网 时间:2024/06/06 03:51
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class eggs{ //判断是否有鸡蛋 private boolean flag=false; //第几个鸡蛋 private int sum=0; Lock lock=new ReentrantLock(); //用当前一个锁 获取2个监视器 一个监视生产鸡蛋 一个监视出售鸡蛋 Condition con1=lock.newCondition(); Condition con2=lock.newCondition(); public void Eggs() { lock.lock(); try { if(flag) try { //this.wait(); con1.await(); } catch (Exception e) { // TODO: handle exception } sum++; System.out.println(Thread.currentThread().getName()+"生产.."+sum); flag=true; con2.signal(); } finally { lock.unlock(); } } public void Sale() { try { lock.lock(); if(!flag) try { //this.wait(); con2.await(); } catch (Exception e) { // TODO: handle exception } System.out.println(Thread.currentThread().getName()+"...销售.."+sum); flag=false; con1.signal(); } finally { lock.unlock(); } }}class Demo implements Runnable{ private eggs r; private boolean f;//判断是生鸡蛋操作 还是销售操作 public Demo(eggs r,boolean f) { // TODO Auto-generated constructor stub this.r=r; this.f=f; } public void run() { if(f) while(true) { try { Thread.sleep(100); } catch (Exception e) { // TODO: handle exception } r.Eggs(); } else while(true) { try { Thread.sleep(100); } catch (Exception e) { // TODO: handle exception } r.Sale(); } }}public class Main { public static void main(String[] args) { eggs e=new eggs(); Demo d1=new Demo(e,true); Demo d2=new Demo(e,false); Thread t1=new Thread(d1); Thread t2=new Thread(d2); t1.start(); t2.start(); }}
阅读全文
0 0
- 使用Lock和Condition 替代 synchronized的 锁和 等待和唤醒
- 14.显式的锁机制,显式的等待唤醒机制--lock和condition
- 多线程的等待唤醒机制和Lock锁
- java 中wait和notify 线程等待和线程唤醒的使用方式 需要借助synchronized
- Python的Lock和condition使用
- Lock和Condition对象的使用
- Lock和synchronized的区别和使用
- Lock和synchronized的区别和使用
- synchronized和lock的区别和使用
- Lock和synchronized的区别和使用
- 线程间通信、等待唤醒机制、生产者消费者问题(Lock,Condition)、停止线程和守护线程、线程优先级
- 锁 synchronized和Lock
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- Java中Synchronized和Lock的使用
- Java中Synchronized和Lock的使用
- Java中Synchronized和Lock的使用
- Java中Synchronized和Lock的使用
- lock和condition
- Rhyme/ Linux ACL权限 默认与递归ACL权限
- poj 2385
- 第一个登录界面web应用
- [Offer收割]编程练习赛26
- Python Flask(一) –by Maxime Bouroumeau-Fuseau
- 使用Lock和Condition 替代 synchronized的 锁和 等待和唤醒
- python属性访问
- 网络工程师笔记《二》
- datetime
- 模拟游戏--艾伦·图灵的传奇人生
- 数据市集与数据仓库
- map端join的实现 ,用来解决小表中数据的读取
- 数据结构实战java实现栈
- Python Flask(二) Custom Error Pages