`

Condition

 
阅读更多

Condition

 

 Condition的功能类似在传统线程技术中的Object.wait()和Object.notify() 的功能。在等待Condition时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为Condition应该是在一个循环中被等待,并测试正被等待状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序程序员总是嘉定这些虚假唤醒可能发生,因此总是在一个循环中等待。

package com.ronbay.thread;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ConditionCmmunication {
	public static void main(String[] args) {
		final Business business = new Business();
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = 1; i <= 50; i++) {
					business.sub(i);
				}
			}
		}).start();
	}

	static class Business{
		Lock lock = new ReentrantLock();
		Condition condition = lock.newCondition();
		private boolean bShouldSub = true;
		public synchronized void sub(int i){
			lock.lock();
			try {
				while(!bShouldSub){
					try {
						condition.await();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for (int j = 1; j < 10; j++) {
					System.out.println("sub thread sequence of " + j +",loop of =" + i);
				}
				bShouldSub = false;
				//发信号
				condition.signal();
			}finally{
				lock.unlock();
			}
		}
		public synchronized void main(int i) {
			lock.lock();
			try {
				while(bShouldSub){
					try {
						condition.await();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for (int j = 1; j < 100; j++) {
					System.out.println("main thread sequence of " + j +",loop of =" + i);
				}
				bShouldSub = true;
				//发信号
				condition.signal();
			}finally{
				lock.unlock();
			}
		}
}

}

 

分享到:
评论

相关推荐

    MyBatisPlus条件构造器Condition的用法示例代码

    在MyBatisPlus中,`Condition`类是用于构建动态SQL的重要工具,它可以实现灵活的条件查询,使得开发者无需手动拼接SQL语句。下面我们将详细介绍`Condition`类的使用方法,并通过示例代码来展示其功能。 首先,`...

    condition_variable源码以及详细分析.docx

    "condition_variable源码详细分析" Condition_Variable 是 C++11 中引入的一种线程同步机制,它提供了一个高效的方式来同步多个线程的执行顺序。在这篇文章中,我们将详细介绍 Condition_Variable 的使用方法和...

    前端项目-condition.zip

    【标题】"前端项目-condition.zip" 提供了一个高级条件库,名为 "condition.js-master",这显然关注的是前端开发中的条件逻辑处理。在前端开发中,条件语句是不可或缺的一部分,用于根据不同的条件执行不同的代码...

    java中的Lock类和Condition类.docx

    Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...

    spring缓存机制-根据condition加入缓存(三)

    本篇文章将详细讲解如何利用`condition`属性来控制哪些数据可以被缓存,以实现更加精细化的缓存策略。 ### 一、Spring缓存概述 Spring框架提供了一种统一的缓存抽象,支持多种缓存实现,如EhCache、Hazelcast、...

    Java多线程之ReentrantLock与Condition - 平凡希 - 博客园1

    - **Condition**:`ReentrantLock`支持多个条件变量,每个`Condition`对象都有自己的等待队列,可以实现更细粒度的同步控制。与`synchronized`的`wait()`和`notifyAll()`不同,`Condition`提供了`await()`和`signal...

    Run Condition Plugin 1.0

    Run Condition Plugin 1.0 hpi

    线程通信(Condition) 实例

    线程通信(Condition)实例,完整的代码文件,你只需要编译运行即可,就可以看看结果,然后分析。

    springboot通过@Condition注解类型完成加载配置内容

    通过@Bean和@Condition 注解自定义对于的condition里面根据自定义的条件实现指定类注入到spring中;@ConditionalOnProperty可以根据配置文件中的 属性值不同将不同的类注入到spring中 该资源中案例完整,代码简单移动

    SQL_CONDITION.rar_condition sql_condition sql_sql where conditi

    本文将深入探讨`WHERE`条件类在SQL查询中的使用,以及如何结合`SQL_CONDITION`来构建更复杂的查询语句。 首先,我们要明白`WHERE`子句的基本用法。`WHERE`关键字后跟一个或多个条件表达式,这些表达式用于定义要...

    tomcat-redis-session-manager-tomcat-7.jar解决race condition问题

    解决race condition问题,根据git最新源码编译

    Java concurrency之Condition条件_动力节点Java学院整理

    在Java并发编程中,`Condition`接口是Java并发包(java.util.concurrent)中的一个重要组成部分,它提供了比`synchronized`关键字更为精细的线程同步和唤醒机制。`Condition`允许我们创建多个独立的等待队列,每个...

    rest_condition, Django rest框架的复杂权限流( http.zip

    rest_condition, Django rest框架的复杂权限流( http rest_conditiondjango-rest-framework的复杂权限流。安装安装最新版本的最简单方法是使用 pip/easy_install从PyPI中提取它:pip install rest_condit

    Java条件变量的深度应用:使用Condition接口实现同步等待

    Java通过java.util.concurrent.locks包中的Condition接口提供了条件变量的实现。本文将详细介绍Condition接口的工作原理、使用方法以及如何在实际项目中应用它。 Condition接口是Java并发编程中实现等待/通知模式的...

    race-condition-exploit, 帮助开发web应用程序竞争条件的工具.zip

    race-condition-exploit, 帮助开发web应用程序竞争条件的工具 竞争条件利用帮助开发web应用程序竞争条件的工具用法$ python rc-exploit --helpusage: rc-exploit [-h] [--threads THREADS] plugin.. .Ra

    线程并发控制condition互斥量 多线程写的:生产者、消费者问题

    线程并发控制condition 互斥量 多线程写的:生产者、消费者问题

    Java学习资料-详解Condition的await和signal等待/通知机制

    在Java多线程编程中,`Condition`是Java并发包`java.util.concurrent.locks`中的一个接口,它提供了比`Object`类中的`wait()`、`notify()`和`notifyAll()`更加灵活和强大的线程间通信机制。`Condition`与`Lock`配合...

    JavaLock与Condition的理解Reentran

    本文将深入探讨JavaLock中的ReentrantLock(可重入锁)以及与其紧密相关的Condition接口,帮助你理解它们的工作原理和应用场景。 **一、ReentrantLock可重入锁** ReentrantLock是Java.util.concurrent.locks包下的...

    IfCondition结构1

    在TensorRT中,`IfCondition`结构用于构建条件分支网络,允许模型在运行时根据输入数据的特定条件选择执行不同的计算路径。这对于处理具有条件逻辑的复杂神经网络模型尤其有用。在提供的初始示例代码中,`If...

Global site tag (gtag.js) - Google Analytics