zoukankan      html  css  js  c++  java
  • 关于ReentrantLock和Condition的用法

           这篇博客是过年后的第一篇博客,2.13正式上班,之前在家休年假。上班第一天公司说有个紧急的项目需要上线,所以我们连续加了两个星期的班,直到上个周六还在加班,终于成功上线了。今天是2月的最后的一天,继续多线程的博客系列,是关于ReentrantLock和Condition的用法。废话不多说,先上代码。

    public class Worker7 {
    
    	private int count = 0;
    	private Lock lock = new ReentrantLock();
    	private Condition condition = lock.newCondition();
    
    	private void incrment() {
    		for (int i = 0; i < 10000; i++) {
    			count++;
    		}
    	}
    
    	public void firstThread() throws InterruptedException {
    		lock.lock();
    		System.out.println("有人在试衣间吗?哥哥要试试这东亚风格的大裤衩 ");
    		condition.await();
    		System.out.println("好的,我进来了");
    		try {
             incrment();
    		} finally {
              lock.unlock();
    		}
    	}
    
    	public void secondThread() throws InterruptedException {
    		Thread.sleep(3000);
    		lock.lock();
    		System.out.println("姐在,你要等会儿,我正在穿衣服,不许偷看啊");
    		new Scanner(System.in).nextLine();
    		System.out.println("姐要马上出来了");
    		condition.signal();
    		try {
    			incrment();
    		} finally {
    			lock.unlock();
    		}
    	}
    	
    	public void finished(){
    		System.out.println("count is: " +count);
    	}
    
    }
    

      这代码其实跟上一遍的notify和wait的效果是一样的,都是两个线程之间的通信,那些汉字其实就是每个线程要执行的具体业务逻辑。只是notify和wait在synchronized块执行的,好了这里要涉及到synchronized与ReentrantLock的区别?区别是啥呢?肯定有不一样的地方,不然Java设计者为啥要设计两个关键字都表示线程同步呢。http://javarevisited.blogspot.com/2013/03/reentrantlock-example-in-java-synchronized-difference-vs-lock.html  这个有着详细的介绍。

    
    
  • 相关阅读:
    前端开发-学习资料库
    前端数据校验从建模开始
    让 Markdown 中的代码可以实时运行
    小而美的 React Form 组件
    React 实现一个漂亮的 Table
    RSuite 一个基于 React.js 的 Web 组件库
    管理系统的前端解决方案:Pagurian V1.3发布
    selenium java 自动化测试 基于火狐浏览器/谷歌浏览器
    java从ldap中导出数据到ldif文件中
    根据官方文档搭建springcloud之eureka
  • 原文地址:https://www.cnblogs.com/tleopard/p/6478270.html
Copyright © 2011-2022 走看看