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 ...
随机推荐
- 【HTML5】SVG内联
什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...
- android 按钮宽度按比例
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_paren ...
- HyperLink控件
设置链接 NavigateUrl 填写链接 text 属性 为显示内容
- Spring的属性编辑器
bean类 import java.util.Date; public class Bean { private Date date; public Date getDate() { return d ...
- Unity制作游戏中的场景
Unity制作游戏中的场景 1.2.3 场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...
- 安卓智能手持POS打印票据 扫描盘点移动开单软件/无线开单系统/PDA移动开单软件
移动开单手持机,它通过WIFI或者GPRS连接并访问电脑数据,实现移动扫描开单,数据同步上传等功能.方便.实用,大大提高工作效率!安卓智能手持POS是一套适合大酒店.咖啡馆..洗衣店.按摩洗浴,商场等 ...
- Revit二次开发示例:DisableCommand
Revit API 不支持调用Revit内部命令,但可以用RevitCommandId重写它们(包含任意选项卡,菜单和右键命令).使用RevitCommandId.LookupCommandId()可 ...
- java中的日期转换
在java中有两种Date对象,一种是java.sql.Date,另一种是java.util.Date 一.java.sql.Date对象: 这种Date对象使用了进行数据库操作的,它对应了数据库中的 ...
- Mysql 学习
一.ubuntu下mysql的安装: 通过sudo apt-get install mysql-server 完成: 然后可以通过/etc/init.d/mysql 进行start/stop/rest ...
- Odoo Entypo Regular Icon List
参考地址: http://www.fontslog.com/entypo-regular-otf-33800.htm#custompreview 或 http://www.w3cplus.com/w3 ...