这篇博客是过年后的第一篇博客,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  这个有着详细的介绍。

												

关于ReentrantLock和Condition的用法的更多相关文章

  1. 【Java多线程通信】syncrhoized下wait()/notify()与ReentrantLock下condition的用法比较

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6556925.html  一:syncrhoized使用同一把锁的多个线程用通信实现执行顺序的调度 我们知道,使 ...

  2. 从使用角度看 ReentrantLock 和 Condition

    java 语言中谈到锁,少不了比较一番 synchronized 和 ReentrantLock 的原理,本文不作分析,只是简单介绍一下 ReentrantLock 的用法,从使用中推测其内部的一些原 ...

  3. java 多线程 19: ReentrantLock 与 Condition

    ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. Reentran ...

  4. 理解Condition的用法

    这个示例中BoundedBuffer是一个固定长度的集合,这个在其put操作时,如果发现长度已经达到最大长度,那么会等待notFull信号,如果得到notFull信号会像集合中添加元素,并发出notE ...

  5. Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition

    锁的概念 从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock. 本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍Re ...

  6. ReentrantLock与Condition构造有界缓存队列与数据栈

    通过ReentrantLock与Condition的设计,以数组为基础,可以实现简单的队列和栈的数据结构,临界阻塞的效果. ReentrantLock相对于synchronized比较大的一个区别是有 ...

  7. Java多线程之ReentrantLock与Condition

    一.ReentrantLock 1.ReentrantLock简介 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”.ReentrantLock 类实现了 Lock ,它拥有与 sy ...

  8. Java多线程之wait、notify/notifyAll 详解,用wait 和notifyAll 以及synchronized实现阻塞队列,多线程拓展之ReentrantLock与Condition

    前言:这几天看了很多关于多线程的知识,分享一波.(但是目前接触的项目还未用到过,最多用过线程池,想看线程池 请看我之前的博客) 关于基本的理论等 参考如下: https://www.cnblogs.c ...

  9. ReentrantLock和condition源码浅析(二)

    转载请注明出处... 接着上一篇的ReentrantLock和condition源码浅析(一),这篇围绕着condition 一.condition的介绍 在这里为了作对比,引入Object类的两个方 ...

随机推荐

  1. MongoDB升级教程

    1.排序 sort()方法:其中 1 为升序排列,而-1是用于降序排列. db.col.find({},{"title":1,_id:0}).sort({"likes&q ...

  2. 分30条依次解析xml并插入数据库成功

    package xxx; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import or ...

  3. Ubuntu安装飞鸽传输

    飞鸽传书下载地址 http://www.ipmsg.org.cn/ipmsg/download.html 下载以后解压压缩包,会有一个可执行文件,executable文件. ./Qipmsg 如果没报 ...

  4. C#创建datatable (转)

      C#创建datatable 方法一: DataTable tblDatas = new DataTable("Datas"); DataColumn dc = null; dc ...

  5. python 自动化之路 day 13

    本节内容参考博客: http://www.cnblogs.com/wupeiqi/articles/5132791.html http://www.cnblogs.com/wupeiqi/articl ...

  6. 最简化模型——css3分阶段动画效果(经过实测)

    body {    background: #dcdcdc;    -webkit-animation: colorin 5s; /* chrome调用属性 */    animation: colo ...

  7. js原生设计模式——6复杂对象的构建—Builder建造者模式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. 转对象(含length属性)成数组Array.prototype.slice.call(arguments)

    我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...

  9. KingbaseES的HA搭建

    1.配置资源前准备: 安装好数据库并保持两台机器用户ID及组ID一致,组ID和用户ID在/etc/passwd查看,如不保持一致,可能导致切机时阵列的属主改变,导致数据库无法启动. 建议用法,现在两台 ...

  10. SVG在网页中的四种使用方式

    1,直接打开simple.svg <svg xmlns="http://www.w3.org/2000/svg" width="200" height=& ...