JAVA线程锁lock下Condition的使用
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; /**
* Lock下提供了一个condition条件,其中的condition提供了await和signal两个方法,
* 起作用和Object提供的wait和notify相同,一个lock下可以有多个condition。
*
* @author
*
* 例子,使用lock实现互斥,condition实现通信,来做子线程打印10次,主线程打印100次,如此反复
*/
public class ConditionTest { public static void main(String[] args) {
final Business business = new Business();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
business.sub();
}
}
}).start(); while (true) {
business.main();
}
} // ConditionTest.Business
static class Business {
private Lock lock = new ReentrantLock();
private Condition cond = lock.newCondition();
private boolean flag = true; // true : main run , false : sub run public void main() {
lock.lock();
try {
while (!flag) {
try {
cond.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 100; i++) {
System.out.println("main of loop Number " + i);
}
flag = false;
cond.signal();
} finally {
lock.unlock();
}
}
public void sub() {
lock.lock();
try {
while (flag) {
try {
cond.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println("sub of loop Number" + i);
}
flag = true;
cond.signal();
} finally {
lock.unlock();
}
}
}
}
JAVA线程锁lock下Condition的使用的更多相关文章
- JAVA线程锁lock下Condition高级使用-多个Condition的整合使用
		
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
 - 【Java线程】Lock、Condition
		
http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/develope ...
 - Java线程锁一个简单Lock
		
/** * @author * * Lock 是java.util.concurrent.locks下提供的java线程锁,作用跟synchronized类似, * 单是比它更加面向对象,两个线程执行 ...
 - 工作常用4种Java线程锁的特点,性能比较、使用场景
		
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
 - JAVA线程锁-读写锁
		
JAVA线程锁,除Lock的传统锁,又有两种特殊锁,叫读写锁ReadWriteLock 其中多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥 例子: /** * java线程锁分为读写锁 ReadWri ...
 - Java线程锁&分布式锁的理解及应用
		
了解Java线程锁之前,先理解线程和进程的定义.进程是操作系统分配资源(CPU)的基本单位,线程是CPU执行的基本单位,一个进程可拥有多个线程,同进程间的多个线程共享分配给进程的资源.比如启动JVM时 ...
 - 孤荷凌寒自学python第三十九天python 的线程锁Lock
		
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
 - C# 关于线程锁lock的使用方法
		
C# 关于线程锁lock的使用方法 原创 2016年09月02日 10:07:05 标签: c# / 线程 / 锁 / lock 11937 在多线程编程中,可能会有许多线程并发的执行一段代码(代码块 ...
 - Android多线程研究(9)——线程锁Lock
		
在前面我们在解决线程同步问题的时候使用了synchronized关键字,今天我们来看看Java 5.0以后提供的线程锁Lock. Lock接口的实现类提供了比使用synchronized关键字更加灵活 ...
 
随机推荐
- c# select标签绑定枚举,并以Description做Text显示
			
今天在做项目时遇到一个问题: 开发中有些字段是枚举类型如 Dept 企业表中可能有个字段 Property 性质 0:事业单位,1:私企,2:外企,但有时我们不会单独为性质这个字段定义一张表, 而是在 ...
 - MySQL 5.7贴心参数之binlog_row_image
			
相信大家都了解mysql binlog的格式,那就是有三种,分别是STATEMENT,MiXED,ROW.各有优劣,具体的请大家自行查阅资料.在MySQL 5.7版本以前,虽然ROW格式有各种各样的好 ...
 - loading.gif
 - 利用.htaccess实现伪静态方法
			
首先配置服务器启动重写模块打开 Apache 的配置文件 httpd.conf .将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉.保存后重启 ...
 - 【转】NumPy-快速处理数据
			
2.0 简介 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针(为了保存各种类型的对象,只能牺牲空间).这样 ...
 - array_diff的参数前后循序的区别
			
//如果两个参数之间有区别.array_diff会返回第二个参数的差值 $oldData = array(0=>'德国',1=>'deguo'); $newData = array(0=& ...
 - Thinking in Java——笔记(8)
			
Polymorphism The polymorphic method call allows one type to express its distinction from another, si ...
 - support HTML5 in IE8
			
<!--this code is used to support HTML5 in IE8--> <!--[if IE]><script type="text/ ...
 - Postgre cannot insert multiple commands into a prepared statement
			
悲剧... FireDAC连接Postgre数据库, 使用默认的属性, 一次执行多条SQL的时候, 会报"cannot insert multiple commands into a pre ...
 - net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
			
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...