线程通信 (2)- Condition接口
来源:互联网 发布:macbook破解软件网站 编辑:程序博客网 时间:2024/06/05 18:57
如果程序不使用synchronized关键字来保证同步,而是使用Lock对象来保证同步,则系统中不存在隐式的同步监视器,也就不能使用wait() ,notify(),notifyAll()方法来进行线程通行了。
Condition
当使用Lock对象来保证同步时,Java提供了一个Condition类来保持协调。
condition实例的创建方法。
Lock lock = new ReentrantLock();Condition condition = lock.newCondition();
condition的三个主要方法
改用condition类实现上篇博文的需求
public class Account{ //显式定义Lock对象 private final Lock lock = new ReentrantLock(); //获得指定Lock对象对应的condition private final Condition condition =lock.newCondition(); //封装账户编号、账户余额两个成员变量 private String accountNo; private double balance; //标识账户中是否有存款 private boolean flag =false; //取方法 public void draw(double drawAmount){ //加锁 lock.lock(); try{ //flag为假就代表没钱,取方法阻塞 if(!flag){ condition.await(); } else{ //执行取钱操作 balance -=drawAmount; System.out.println("账户余额为:"+balance); //将标识账户是否有余额的旗标设置成false flag = false; //唤醒其他线程 condition.signalAll(); } } catch(InterruptedException ex){ ex.printStackTrace(); } //使用finally来释放锁 finally{ lock.unlock(); } } //存方法 public synchronized void deposit(double depositAmount){ //加锁 lock.lock(); try{ //flag为真就代表有钱,存方法阻塞 if(!flag){ condition.await(); } else{ //执行存钱操作 balance +=depositAmount; System.out.println("账户余额为:"+balance); //将标识账户是否有余额的旗标设置成rue flag = true; //唤醒其他线程 condition.signalAll(); } } catch(InterruptedException ex){ ex.printStackTrace(); } //使用finally来释放锁 finally{ lock.unlock(); } } }
阅读全文
0 0
- 线程通信 (2)- Condition接口
- java 线程通信Lock和condition接口
- JDK5 condition线程通信
- Condition使用---线程通信
- Condition线程通信
- Condition 控制线程通信
- Java线程总结(七):并发包------线程通信condition
- 线程通信---使用Condition控制线程通信
- 使用Condition控制线程通信
- 线程之间的通信Condition
- 使用Condition控制线程通信:
- Java线程之Condition高效线程通信
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- 多线程__【线程间通信】【等待唤醒机制】【多生产多消费】【Lock&Condition接口】
- 12-使用java5条件阻塞condition实现线程间通信-实现线程间通信方式(2)
- JAVA5多线程---Condition使用---线程通信
- java 之 Condition 线程间通信
- Lock&Condition实现线程同步通信
- java用特殊字符拼接文字
- 《机器学习基石》笔记:第二讲
- Opencv3.3 人脸识别 图片拼接 Android
- Java集合一之ArrayList
- 用javascript求两个字符串最大的相同的子串
- 线程通信 (2)- Condition接口
- JavaScript(上)-课堂笔记
- php中引用&的真正理解-变量引用、函数引用、对象引用
- Python3:《机器学习实战》之支持向量机(3)完整版SMO
- Linux系统文件权限
- 启程
- Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口
- Qt 实现进程间窗口嵌套(一)
- Java工具之javac---javadoc--javah--jar