java Conditions
//Listing 7-2. Achieving Synchronization in Terms of Locks and Conditions
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class A {
public static void main(String[] args) {
Shared s = new Shared();
new Producer(s).start();
new Consumer(s).start();
}
} class Shared {
private char c;
private volatile boolean available;
private final Lock lock;
private final Condition condition; Shared() {
available = false;
lock = new ReentrantLock();
condition = lock.newCondition();
} Lock getLock() {
return lock;
} char getSharedChar() {
lock.lock();
try {
while (!available)
try {
condition.await();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
available = false;
condition.signal();
} finally {
lock.unlock();
return c;
}
} void setSharedChar(char c) {
lock.lock();
try {
while (available)
try {
condition.await();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
this.c = c;
available = true;
condition.signal();
} finally {
lock.unlock();
}
}
} class Producer extends Thread {
private final Lock l;
private final Shared s; Producer(Shared s) {
this.s = s;
l = s.getLock();
} @Override
public void run() {
for (char ch = 'A'; ch <= 'Z'; ch++) {
l.lock();
s.setSharedChar(ch);
System.out.println(ch + " produced by producer.");
l.unlock();
}
}
} class Consumer extends Thread {
private final Lock l;
private final Shared s; Consumer(Shared s) {
this.s = s;
l = s.getLock();
} @Override
public void run() {
char ch;
do {
l.lock();
ch = s.getSharedChar();
System.out.println(ch + " consumed by consumer.");
l.unlock();
} while (ch != 'Z');
}
}
java Conditions的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Effective Java 57 Use exceptions only for exceptional conditions
Principle Exceptions are, as their name implies, to be used only for exceptional conditions; they sh ...
- Effective Java 58 Use checked exceptions for recoverable conditions and runtime exceptions for programming errors
Three kinds of throwables Throwables Checked Recoverable checked exceptions Y Y runtime exceptions N ...
- 20、Java并发性和多线程-Slipped Conditions
以下内容转自http://ifeve.com/slipped-conditions/: 所谓Slipped conditions,就是说, 从一个线程检查某一特定条件到该线程操作此条件期间,这个条件已 ...
- java 锁4
关于锁的分类 及 锁的灵活使用: 参见 http://blog.csdn.net/qaz13177_58_/article/details/21543515 有几句话说得相当不错: 锁的分类 : 同 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- (四)Spark集群搭建-Java&Python版Spark
Spark集群搭建 视频教程 1.优酷 2.YouTube 安装scala环境 下载地址http://www.scala-lang.org/download/ 上传scala-2.10.5.tgz到m ...
- JMM(java内存模型)
What is a memory model, anyway? In multiprocessorsystems, processors generally have one or more laye ...
随机推荐
- 电赛菜鸟营培训(五)——OLED屏幕的使用
一.取模软件的使用 首先进行设置 然后可以生成显示这个字母的代码,列优先,先按列画8行,然后再继续画下一列.汉字为16*16,字母为8*8,对应生成相应个数的ox代码. 二.STM32烤写OLED # ...
- eclipse下导入工程的小问题
- 【HTML5】表单元素
* datalist datalist 元素规定输入域的选项列表. 列表是通过 datalist 内的 option 元素创建的. 如需把 datalist 绑定到输入域,请用输入域的 list 属性 ...
- 讓 MySQL 能夠用 EF6
http://www.dotblogs.com.tw/yc421206/archive/2014/03/14/144395.aspx 要讓 MySQL 能夠用 EF6,我花了一點時間,在此記錄一下 安 ...
- android 按钮宽度按比例
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_paren ...
- Loadrunner中web_reg_save_param的使用详解
[摘要]利用实际案例说明如何使用Mercury LoadRunner提取包含在HTML页内的动态信息并创建参数. [关键词]性能测试,压力测试,Mercury LoadRunner 应用范围 在使用L ...
- 关于Win7图标丢失、不正常显示的修复方法
Windows7安装某些软件后,应用程序图标显示不正常,只会显示出是一个文件,无图标或图表显示错误.如果双击,也可以打开此应用程序.观察发现,一般从“管理”--“磁盘管理”中调整了磁盘盘符之后,容易出 ...
- 其他主流开源硬件简介BeagleBone Black快速入门
其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...
- Sprint第一个冲刺(第十一天)
一.Sprint介绍 修改登录信息界面(修改用户名.密码.邮箱.电话.年龄),且同步到云端:修改Item布局:增添设置页. 实验截图: 任务进度: 二.Sprint周期 看板: 燃尽图:
- BFS+模拟 ZOJ 3865 Superbot
题目传送门 /* BFS+模拟:dp[i][j][p] 表示走到i,j,方向为p的步数为多少: BFS分4种情况入队,最后在终点4个方向寻找最小值:) */ #include <cstdio&g ...