JAVA线程锁lock下Condition的使用
2016-01-08 11:17
281 查看
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(); } } } }
相关文章推荐
- 1.java成长之路——重读java编程思想01
- java回调
- spring MVC原理
- java免费发送邮件实现
- JDK中的URLConnection参数详解
- java-泛型
- (java)Jump Game
- java.sql.SQLException: Error writing file '/tmp/MYkn6JQ8' (Errcode: 28)
- java 回调
- eclipse中用maven创建web项目
- spring mvc - 对静态资源的处理
- java基础--ObjectInputStream和ObjectInputStream类
- 关于ADF JDeveloper 11g 的 Unable to create an instance of the Java Virtual Machine
- OpenJDK 7的HotSpot VM目录结构(转)
- SpringMVC 基础教程 框架分析
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- [转载]Eclipse调试Java的10个技巧
- (java)Min Stack
- mybatis整合Spring的基本步骤
- (java)First Bad Version