Java Condition使用

Java多线程编程中使用Condition类操作锁的方法详解 Condition是java.util.concurrent.locks包下的类,提供了对线程锁的更精细的控制方法,下面我们就来看一下Java多线程编程中使用Condition类操作锁的方法详解 立即下载
使用
Condition是个接口,基本的方法就是await()和signal()方法;
Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()
调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以使用

 void await() throws InterruptedException;
  调用前需要先获取锁,使当前线程等待,同时释放当前锁,当其他线程调用signal()方法或者signalAll()方法时,线程会重新获取锁并继续执行。
        或者线程被中断时,也能跳出等待。

 void awaitUninterruptibly();  //与await基本相同,但是它不能在等待过程中响应中断

 long awaitNanos(long var1) throws InterruptedException;   //线程等待,指定最长等待时间,单位ns

 boolean await(long var1, TimeUnit var3) throws InterruptedException;  //线程等待,指定最长等待时间

 boolean awaitUntil(Date var1) throws InterruptedException;  //线程等待,指定最长等待到某个时间

 void signal();   //用于唤醒一个等待中的线程

 void signalAll();  //唤醒所有等待中的线程

Demo

public class ConditionTest  implements Runnable{
  public static ReentrantLock lock = new ReentrantLock();
  public static Condition condition = lock.newCondition();



    @Override
    public void run() {
        try{
            lock.lock();
            System.out.println(Thread.currentThread().getName()  +",Thread is await,time:"+getCurrentDateTime());
            condition.await();  //线程等待直到其他线程唤醒
            System.out.println(Thread.currentThread().getName() + ",Thread is going on,time:"+ getCurrentDateTime());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            lock.unlock();
        }
    }

    private String getCurrentDateTime() {
        DateFormat fdt = DateFormat.getDateTimeInstance();
        return fdt.format(new Date());
    }


    public static void main(String[] args) {
        ConditionTest cond = new ConditionTest();
        Thread thread1 = new Thread(cond,"Thread-t1");
        thread1.start();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        lock.lock();
        condition.signal();  //主线程唤醒一个正在等待的线程
        lock.unlock();
    }

}

结果:

Thread-t1,Thread is await,time:2020-5-15 18:14:14
Thread-t1,Thread is going on,time:2020-5-15 18:14:19

 

参考:《Java 高并发程序升级》

八股文(Unity篇) 在Unity中,协程是通过迭代器实现的,即将协程函数的返回值类型定义为IEnumerator,然后使用yield语句暂停协程的执行,并在需要恢复执行时通过MoveNext()方法继续执行。Unity中的协程是一种能够在主函数中暂停和恢复执行的功能,它使用了C#的迭代器。Resources方式:Resources方式:使用Resources.Load方法加载Resources文件夹下的资源,这种方式的好处是简单易用,无需手动打包资源,但是会导致应用包变得较大,加载速度较慢,不适合较大的资源文件。 阅读详情

相关推荐

Windows NPS与华为、华三、思科设备RADIUS认证实战指南

本文详细介绍了Windows NPS与华为、华三、思科设备RADIUS认证的实战配置指南。通过NPS服务器统一管理网络设备认证,实现企业级安全访问控制,涵盖基础配置、设备对接及故障排查方法,助力管理员提升网络安全管理效率。

weixin_29284201的博客 506

Java中的Condition详解

一、Condition简介 任意一个Java对象,都拥有一组监视器方法(定义在Object类中),主要包括wait,notify,notifyAll方法,这些方法与synchornized关键字相配合,可以实现等待/通知模式。 Condition接口也提供了类似的Object的监视器方法,与Lock配合可以实现等待/通知模式。但是这两者在使用方式以及功能上还是有差别的。 Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁。Co

向上的"狼"的博客 2万+

【ROS】ROS局域网下多机通讯方法

最近工作中需要用到多机通讯,这里稍微总结一下使用方法。一、网络配置ifconfig这里举个例子,主机的IP地址为192.168.1.127,从机的IP地址为192.168.1.126;之后可测试一下能否互相ping通,成功后进行下一步。

weixin_43326110的博客 3362

java中Condition类的详细介绍(详解)

已找不到原文了,还望原文博主看到能告诉小白一下,一定标注原文地址 一 condition 介绍及demo  Conditio...

6340

深入解析JESD204B Subclass 1中的SYSREF与LMFC同步机制

本文深入解析了JESD204B Subclass 1协议中的核心同步机制,重点阐述了SYSREF信号如何作为系统级参考,对齐所有设备内部的本地多帧时钟(LMFC),从而实现高速多通道数据采集系统中的确定性延迟。文章结合实战经验,详细说明了硬件设计、时序要点及软件配置流程,是解决多ADC芯片同步对齐问题的关键指南。

weixin_29271263的博客 399

工程伦理ppt

工程伦理学 第一章 工程与伦理 1.1 如何理解工程 一、技术与工程的区别 二、技术与工程的联系 三、工程的定义 五、工程具有不确定性和探索性 六、理解工程活动的7个维度 1.2 如何理解伦理 一、道德与伦理 二、不同的伦理立场 三、伦理困境与伦理选择 1.3 工程实践中的伦理问题 一、工程活动中的行动者网络(具有动态性和网络性) 二、主要的工程伦理问题 三、工程伦理问题的特点 1.4 如何处理工程实践中的伦理问题 一、工程实践中伦理问题的辨识 二、处理工程伦理问题的基本原则 三、应对工程伦理问题的基本思路

weixin_51656605的博客 7万+

Java并发之Condition详解

一、简介 1. 什么是Condition 任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。——摘自《Java并发编程的艺术》 下面是Cond

weixin_41951205的博客 1416

【编号326】全国地灾数据全国25万多个地质灾害点空间分布数据

全国地质灾害点分布数据涵盖25万多个各类灾害点信息,为灾害防治提供重要依据。通过分析灾害分布规律,可识别高风险区,指导监测预警、应急避险和基础设施建设。多地成功案例(如湖北兴山崩塌避险、重庆长寿滑坡预警、湖南"挪床行动")证明,提前预警和科学防治能有效避免人员伤亡。云南省2024年通过预警体系成功避让31起灾害,保护1342人生命安全。这些实践表明,地质灾害防治需结合科技手段与群防体系,实现早预警、早处置。

千奇百怪无奇不有 1474

java中condition使用

1.Condition将Object监视器方法(wait()、notify()和notifyAll())分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock替代了synchronized方法和语句的使用,Condition替代了 Object 监视器方法的使用。   条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等...

qq_31987649的博客 1222

条件DDPM:Diffusion model的第三个巅峰之作

前言:DDPM从2020年诞生,短短一年的时间,模型上有两个巨大的改进,其中一个就是condition的引入,最近大部分DDPM相关的论文都会讨论这一点,有些文章称之为latent variable。和当年GAN的发展类似,CGAN和DCGAN的出现极大程度上促进了GAN的发扬光大,意义重大。本文基于前面几篇文章继续聊一聊: 从VAE到Diffusion Model_沉迷单车的追风少年-优快云博客 为什么diffusion model扩散模型可以称为score-based models?_沉迷单车的.

沉迷单车的追风少年 1万+

innovus:addRepeaterByRule用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?addRepeaterByRule不管transition/timing violation,只根据约束的length/cap/fanout等等去给net 插buffer。

m0_61544122的博客 1093

Java进阶篇--Condition与等待通知机制

总的来说,Condition的实现依赖于底层的锁机制和等待队列,通过等待队列实现了线程的等待和唤醒,通过锁机制实现了线程同步和互斥。当一个线程调用await()方法时,会释放锁并进入等待状态,并且将当前线程加入到等待队列中。而当其他线程调用signal()或signalAll()方法时,会从等待队列中取出一个节点,并将其转移到同步队列中,并唤醒对应的线程。而当其他线程调用Condition的signal()或signalAll()方法时,会从等待队列的头部取出一个节点,并将其转移到锁的同步队列中。

m0_74293254的博客 1512

第21章—技术管理篇(上):身为技术人该怎样带好团队并做好管理者

上节讲了职业规划和学习提升这两个话题,随着职业规划的不断落地,或者自己能力的不断提升,大家也会逐渐被提拔成“职级更高”的人。企业规模扩张时,员工数量也会变多,意味着Boss需要更多的人来辅助管理,而管理者会从外部招聘吗?也许会,但大多企业更喜欢从内部选拔,毕竟人的天性更希望找的人值得信赖。此时,一些能力不错、做事靠谱的老员工,就会被“赶上”管理者的位子。作管理不难,但想要“”就需要一定情商。

运维老生常谈 1368

Java中Condition的使用

Java架构师交流群:793825326 java版本:jdk1.8 IDE:idea 18 之前的一篇博客(https://blog.youkuaiyun.com/dap769815768/article/details/96712257)讲了wait、notify\notifyAll的使用,实际上目前我们比较推荐的方式是用Condition的await、signal\signalAll来实现类似的功...

dap769815768的博客 1376

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java中condition的用法_Java中Condition的使用

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18之前的一篇博客(https://blog.youkuaiyun.com/dap769815768/article/details/96712257)讲了wait、notify\notifyAll的使用,实际上目前我们比较推荐的方式是用Condition的await、signal\signalAll来实现类似的功能。添加一个...

weixin_42449583的博客 707

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java中的Condition

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 一、概述 该接口位于java.util.concurrent.locks 声明:public interface Condition Condition 将 Object 监视器方法(wait、notify ...

孤云博客 6178

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java中condition_Java中Condition的使用

Java架构师交流群:793825326java版本:jdk1.8IDE:idea 18之前的一篇博客(https://blog.youkuaiyun.com/dap769815768/article/details/96712257)讲了wait、notify\notifyAll的使用,实际上目前我们比较推荐的方式是用Condition的await、signal\signalAll来实现类似的功能。添加一个...

weixin_34381648的博客 208

Java中condition的用法_java condition 使用

Condition是在java1.5才出现。它用来替换传统的 wait(), notify()实现线程之间的协作。但是更加强大。Condition用 await(), signal, signalAll方法替代wait(), notify()。假如用wait,notify,有三个线程调用一个对象的某个方法,notify只能随机的唤醒一个线程,而不能指定唤醒某个线程,但是用condition的话,就...

weixin_30220707的博客 1394

Java Condition

Java Condition 概述 1.Condition介绍 2.Condition源码分析 3.Condition示例 Condition介绍 在互斥锁ReentrantLock文章中的生产者消费者示例中用到Condition了,分布设...

angweichun6648的博客 243

java condition使用及分析

背景:    上一篇文章基于object的wait、notify实现了生产者、消费者模式。本篇文章继续梳理Condition。condition 介绍及demo Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()...

bohu83的博客 2万+

Java中的Condition

一、Condition简介        任意一个Java对象,都拥有一组监视器方法(定义在Object类中),主要包括wait,notify,notifyAll方法,这些方法与synchornized关键字相配合,可以实现等待/通知模式。    Condition接口也提供了类似的Object的监视器方法,与Lock配合可以实现等待/通知模式。但是这两者在使用方式以及功能上还是有差别的。    ...

yanghan1222的博客 3238

Java Condition类使用及分析

一、Condition介绍 Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来模拟线程间协作。 Condition是个接口,基本的方法就是await()和signal()方法; Condition

小石潭记丶 1508

JAVA Condition 详解

synchronized 关键字,配合Object的wait()、notify()系列方法可以实现等待/通知模式。对于Lock,通Condition也可以实现等待/通知模式。 Condition时一个接口,其实现类是AQS中的ConditionObject Lock对象通过newCondition()方法可以获得Condition对象(其实就是ConditionObject) Lock l...

qq_37001674的博客 520

java condition_如何理解Java并发里的Condition

原文:http://www.importnew.com/9281.html在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,ReentrantLock(重入锁)是jdk的concurrent包提供的一种独占锁的实现。它继承自Dong Lea的 AbstractQueuedSynchronizer(同步器),确切的...

weixin_39708737的博客 210

java condition的理解,java并发之condition

一、Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看O...

weixin_42557656的博客 204

java的condition_java condition的使用实例 condition源码简单了解

先实现一个小练习:连续不断地有序地输出abc(使用多线程,利用线程间的通信)然后大家可以先思考怎么实现先。这里贴上代码:public class Exercise {private int signal = 0;//通过信号量控制abc的输出顺序public synchronized void a() {//加锁使用wait通信,同时保证了信号量的内存可见性while (signal != 0) ...

weixin_42118011的博客 293
上一篇: Java线程协作join使用
下一篇: Java Semaphore使用
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值