在java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5中增加的ReentrantLock也能实现同样的效果,并且功能更加强大。

比如具有嗅探锁定,多路分支通知等功能,在使用上比synchronized更加灵活。

1.Object类中的wait()方法相当于Condition类中的await()方法

2.Object类中的wait(long timeout)相当于Condition类中的await(long time,TimeUnit unit)方法

3.Object类中的notify()方法相当于Condition类中的signal()方法

4.Object类中的notifyAll()方法相当于Condition类中的signalAll()方法

public class MyService {
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition(); public void await() {
try {
lock.lock();
System.out.println("await:" + System.currentTimeMillis());
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
} public void signal(){
try{
lock.lock();
System.out.println("signal:"+System.currentTimeMillis());
condition.signal();
}finally {
lock.unlock();
}
}
} public class ThreadA extends Thread{
private MyService myService; public ThreadA(MyService myService) {
this.myService = myService;
} @Override
public void run() {
myService.await();
}
} public class Run {
public static void main(String[] args) throws InterruptedException {
MyService myService=new MyService();
ThreadA a = new ThreadA(myService);
a.start();
Thread.sleep(1000);
myService.signal();
}
}

输出:

await :1531289025398
signal:1531289026398

java多线程之Lock/Condition简介的更多相关文章

  1. Java——多线程之Lock锁

    Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...

  2. java多线程之Lock线程同步

    1.线程同步: package cn.itcast.heima2; import java.util.concurrent.locks.Lock; import java.util.concurren ...

  3. Java多线程之Lock的使用

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  4. Java多线程之Lock的使用(转)

    package thread.lock; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execut ...

  5. (转)Java多线程之Lock的使用 (待整理)

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  6. Java多线程之Lock的使用<转>

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  7. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  8. 【java并发编程】Lock & Condition 协调同步生产消费

    一.协调生产/消费的需求 本文内容主要想向大家介绍一下Lock结合Condition的使用方法,为了更好的理解Lock锁与Condition锁信号,我们来手写一个ArrayBlockingQueue. ...

  9. Java多线程之ConcurrentSkipListMap深入分析(转)

    Java多线程之ConcurrentSkipListMap深入分析   一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下, ...

随机推荐

  1. C#颜色对照使用表

    这篇文章来来源于C# Color Table,这里是我翻译的中文版本,其中已经加上了我的一些理解和注释.翻译这篇文章的原因是我在写C#程序的时候发现,C#自带的颜色种类极多(详见下表),如果没有直观的 ...

  2. git记不住用户名和密码

    以前我是用svn的 , 我也是最近才用的git 虽然git 有GUI界面  , 但是我觉得还是不如svn 最开始使用git的时候我们直接clone项目的时候可能会设置全局的账号和密码 , 但是我重装系 ...

  3. textarea随内容自动增加高度

    var autoTextarea = function (elem, extra, maxHeight) { extra = extra || 0; var isFirefox = !!documen ...

  4. HDU 1010 Tempter of the Bone heuristic 修剪

    的问题是,在测试修剪. 应该说是更先进的应用. 由于使用的heuristic(经验)修剪.总结这方面的经验法则,别easy.我说,这也是由于先进的在线报告中的应用程序没有分析太多太好的解决这个问题,计 ...

  5. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  6. 《得知opencv》注意事项——矩阵和图像处理——cvAdd、cvAddS and cvAddWeighted

    矩阵和图像操作 (1)cvAdd函数 其结构 void cvAdd(//图像加和 const CvArr* src1,//第一个原矩阵 const CvArr* src2,//第二个原矩阵 CvArr ...

  7. Python抓取框架:Scrapy的架构

    最近在学Python,同时也在学如何使用python抓取数据,于是就被我发现了这个非常受欢迎的Python抓取框架Scrapy,下面一起学习下Scrapy的架构,便于更好的使用这个工具. 一.概述 下 ...

  8. 关于hibernate组件配置

    建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系.以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息单独放在一张表中,然后建立员工 ...

  9. [转]Nodejs开发框架Express4.x开发手记

    Express: ?web application framework for?Node.js? Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮 ...

  10. Bootstrap 图片形状

    @{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport&q ...