`

ThreeConditionCmmunication

 
阅读更多

面试题  子线程执行10次,主线程执行100次;接着子线程再执行十次,主线程再执行100次,如此循环50次

 

package com.ronbay.thread.timer;

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

import javax.swing.text.StyledEditorKit.ForegroundAction;

/**
 * @author Ronbay
 * 面试题  子线程执行10次,主线程执行100次;接着子线程再执行十次,主线程再执行100次,如此循环50次
 *
 */
public class ThreeConditionCmmunication {
	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.sub2(i);
				}
			}
		}).start();
		
	new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = 1; i <= 50; i++) {
					business.sub3(i);
				}
			}
		}).start();
	
		for(int i = 1;i <= 50;i++){
			business.sub3(i);
		}
	}
	
	

	static class Business{
		Lock lock = new ReentrantLock();
		Condition condition1 = lock.newCondition();
		Condition condition2 = lock.newCondition();
		Condition condition3 = lock.newCondition();
		private int shouldSub = 1;
		public  void sub2(int i){
			lock.lock();
			try {
				while(shouldSub != 2){
					try {
						condition2.await();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for (int j = 1; j < 10; j++) {
					System.out.println("sub2 thread sequence of " + j +",loop of =" + i);
				}
				shouldSub = 3;
				//发信号
				condition3.signal();
			}finally{
				lock.unlock();
			}
		}
		
		public  void sub3(int i){
			lock.lock();
			try {
				while(shouldSub != 3){
					try {
						condition3.await();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for (int j = 1; j < 20; j++) {
					System.out.println("sub3 thread sequence of " + j +",loop of =" + i);
				}
				shouldSub = 1;
				//发信号
				condition1.signal();
			}finally{
				lock.unlock();
			}
		}
		public void main(int i) {
			lock.lock();
			try {
				while(shouldSub != 1){
					try {
						condition1.await();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				for (int j = 1; j < 100; j++) {
					System.out.println("main thread sequence of " + j +",loop of =" + i);
				}
				shouldSub = 2;
				//发信号
				condition2.signal();
			}finally{
				lock.unlock();
			}
		}
}

}

 

分享到:
评论

相关推荐

    ### 文章标题: 【自然语言处理】基于ChatGPT的REFORMER框架:提升Text-to-SQL模型的数据合成与增强系统设计

    内容概要:本文介绍了REFORMER,一个由ChatGPT驱动的数据合成框架,旨在解决Text-to-SQL模型因训练数据不足而导致的泛化能力差的问题。REFORMER通过“检索-编辑”方法,利用ChatGPT生成新的(问题,SQL查询)对,无需额外训练。该框架还引入了问题-查询-问题循环一致性验证,确保生成数据的质量。此外,REFORMER探索了两种数据增强技术:带模式信息的直接改写和使用构造SQL查询描述的改写。实验结果表明,REFORMER在多个评估指标上均优于之前的增强方法。 适合人群:对自然语言处理和SQL查询生成感兴趣的科研人员、工程师,尤其是从事Text-to-SQL模型开发和优化的专业人士。 使用场景及目标:①生成更多样化和高质量的(问题,SQL查询)对以增强Text-to-SQL模型的训练数据;②通过ChatGPT生成新的SQL查询和问题改写,提升模型的泛化能力和适应新领域的能力;③验证生成数据的一致性和质量,确保其符合预期。 阅读建议:本文不仅展示了REFORMER的技术细节和实验结果,还讨论了其局限性和未来研究方向。读者应重点关注框架的设计思路、实验设置和结果分析,以理解ChatGPT在数据增强中的应用潜力。同时,建议结合实际应用场景,思考如何利用REFORMER提升现有Text-to-SQL系统的性能。

    20220319-1.pdf

    20220319-1.pdf

    电磁兼容仿真:电磁敏感性分析.zip

    电磁领域系列仿真模拟教程,每个包10几个教程,从基础到精通,案例多多。

    ### 软考高项项目管理领域核心知识点与备考策略:涵盖综合知识、案例分析与论文写作

    内容概要:本文详细介绍了软考高项(高级信息系统项目管理师)的备考策略、考试内容及应试技巧。首先,文章强调了二八法则的应用,即80%的时间精力应放在项目管理领域的核心知识点上,如五大过程组、十大知识域等,20%的时间放在IT知识和组织级项目管理上。备考分为三个阶段:基础阶段通过精读教材、绘制思维导图夯实基础;强化阶段通过真题训练、案例分析提升实战能力;冲刺阶段通过论文押题、模拟考试做好最后准备。文章还特别指出,计算题和论文写作是考试的重点和难点,需重点练习。此外,针对不同地区的考生,提供了差异化的备考建议,如一线城市侧重新技术应用,中西部地区关注乡村振兴信息化等。最后,文章提醒考生关注机考模拟系统的开放时间和准考证打印时间,确保顺利参加考试。 适合人群:准备参加软考高项考试的考生,特别是有一定项目管理基础并希望系统复习、提高应试能力的考生。 使用场景及目标:①帮助考生高效利用有限时间,集中精力复习核心知识点;②通过模拟练习和真题训练,提升计算题和论文写作的能力;③结合实际案例,掌握项目管理全流程知识,提高考试通过率。 其他说明:备考过程中,考生应结合自身实际情况,灵活调整学习计划。同时,充分利用各种学习资源,如精讲课视频、直播课、历年真题等,不断巩固和深化对知识点的理解。考试改革后,机考成为主流,考生需提前熟悉机考系统,确保考试时能够熟练操作。

    多功能医用护理床(sw20可编辑+cad+说明书)_三维3D设计图纸.zip

    多功能医用护理床(sw20可编辑+cad+说明书)_三维3D设计图纸.zip

    西门子S7-200 Smart与台达DT330温控器基于Modbus RTU的485通讯实现及调试技巧

    内容概要:本文详细介绍了西门子S7-200 Smart PLC与台达DT330温控器通过RS485接口进行Modbus RTU通讯的方法。首先,文中阐述了双方设备的通讯参数设置,确保波特率、校验位等参数的一致性。接着,展示了PLC端的轮询控制逻辑,采用定时器和状态机来管理读写操作,避免数据冲突。对于具体的读写操作,提供了详细的寄存器地址映射规则以及数据类型的转换方法,解决了台达温控器特有的寄存器地址偏移问题。此外,还分享了一些实用的调试技巧,如使用串口助手抓包验证通讯效果,以及针对常见错误码的解决方案。最后,在触摸屏方面,利用昆仑通态MCGS组态软件实现了温度数据显示和设定的功能。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些需要进行PLC与温控器通讯集成工作的人员。 使用场景及目标:适用于需要将西门子S7-200 Smart PLC与台达DT330温控器进行通讯连接并实现温度监控的应用场合。主要目的是掌握正确的通讯配置步骤,理解Modbus RTU协议的具体应用,提高系统的可靠性和稳定性。 其他说明:文中提到的所有代码均已经过实际测试,并附带详细的注释,便于读者理解和学习。同时强调了硬件连接的重要性,给出了接线建议,帮助初学者少走弯路。

    基于Simulink的四永磁同步电机偏差耦合同步控制仿真建模与优化

    内容概要:本文详细介绍了利用Simulink构建四台永磁同步电机(PMSM)偏差耦合同步控制系统的方法及其优化策略。首先阐述了多电机同步控制在工业自动化中的重要性和应用场景,如AGV小车底盘驱动、传送带协同等。接着深入探讨了偏差耦合控制的具体实现方式,包括环形耦合结构的设计、耦合补偿算法以及PID参数调整方法。文中特别强调了耦合系数的选择对于系统稳定性的影响,并提供了具体的MATLAB函数用于计算各电机之间的耦合补偿量。此外,还讨论了如何通过动态权重分配算法来增强相邻电机间的耦合关系,从而提高同步速度。同时,针对可能出现的问题提出了预防措施,如避免使用微分环节、设置合理的摩擦系数和采样周期等。最后分享了一些实践经验,例如采用在线参数辨识技术和低通滤波器以应对负载突变等情况。 适用人群:从事工业自动化领域的工程师和技术人员,尤其是那些对多电机同步控制感兴趣的读者。 使用场景及目标:适用于需要精确控制多个电机同步运行的场合,如生产线上多轴协调动作、机器人关节控制等。主要目的是确保各个电机能够按照预定的速度平稳地协同工作,减少由于不同步造成的故障风险。 其他说明:文章不仅提供了理论指导,还包括了许多实用的操作技巧和注意事项,有助于读者更好地理解和掌握这一复杂的控制技术。

    2011春土木工程施工习题集(1).pdf

    2011春土木工程施工习题集(1).pdf

    信捷XD5 PLC与欧姆龙E5CC温控器基于Modbus RTU的双设定温度控制系统实现

    内容概要:本文详细介绍了信捷XD5 PLC与欧姆龙E5CC温控器之间的通讯实现及其双设定温度控制功能。首先,文中阐述了硬件连接的具体步骤,包括PLC、温控器和触摸屏的选择与连接方式。接着,详细解释了参数设置的关键点,确保两者能够正确通信。然后,展示了主程序的轮询机制以及温度读取、设定值写入和输出控制的具体代码实现。针对可能出现的问题,提供了详细的避坑指南和技术细节,如温度值转换、通讯超时处理等。最后,强调了系统的稳定性和可靠性,并给出了实际应用中的经验和建议。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC与温控器通讯感兴趣的读者。 使用场景及目标:适用于需要实现PLC与温控器之间高效、稳定的通讯控制的工业自动化项目。目标是帮助工程师快速掌握信捷XD5 PLC与欧姆龙E5CC温控器的通讯配置和双设定温度控制的实现方法。 其他说明:文中提供的代码和配置建议已经过实际项目的验证,具有较高的实用价值。对于初学者来说,可以作为入门级的学习资料;对于有一定经验的技术人员,则可以作为参考和优化现有系统的依据。

    (整理)2 全 四川大学 土木工程经济练习题 四川大学锦城学院 肖栋天 0303COLLEGE TWO XIA.doc

    (整理)2 全 四川大学 土木工程经济练习题 四川大学锦城学院 肖栋天 0303COLLEGE TWO XIA.doc

    电大自我鉴定土木工程.doc

    电大自我鉴定土木工程.doc

    粉料搅拌器sw18_三维3D设计图纸.zip

    粉料搅拌器sw18_三维3D设计图纸.zip

    00300118347_ad5d7425.pdf

    00300118347_ad5d7425.pdf

    【嵌入式开发】STM32F103C8T6最小系统板硬件组成与开发环境搭建指南:快速上手嵌入式项目开发

    内容概要:文章详细介绍了 STM32F103C8T6 最小系统板,包括其组成、硬件连接方式、开发环境搭建步骤以及一个简单的 LED 闪烁示例代码。STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的 32 位微控制器,具有高性能、低功耗和丰富的外设资源。最小系统板由主处理器、电源电路、时钟电路、复位与调试接口和 I/O 引脚组成。硬件连接方面,支持多种供电方式和调试接口。开发环境可以使用 STM32CubeIDE、Keil MDK-ARM 或 Arduino IDE 搭建。; 适合人群:对嵌入式开发有兴趣的学习者和初学者,尤其是希望了解 STM32 系列微控制器的开发者。; 使用场景及目标:① 学习 STM32F103C8T6 最小系统板的基本组成和硬件连接;② 搭建适合 STM32F103C8T6 的开发环境,如 STM32CubeIDE 或 Keil MDK-ARM;③ 实现简单的嵌入式项目,如 LED 闪烁示例。; 其他说明:此指南提供了详细的步骤和示例代码,帮助用户快速上手 STM32F103C8T6 最小系统板的开发。建议在实际操作中仔细阅读每一步骤,并参考提供的代码示例进行实践。

    公共安全视频图像信息系统管理条例.docx

    公共安全视频图像信息系统管理条例.docx

    回转工作台sw20_三维3D设计图纸_三维3D设计图纸.zip

    回转工作台sw20_三维3D设计图纸_三维3D设计图纸.zip

    清晰结构的三螺杆泵sw16可编辑_三维3D设计图纸_三维3D设计图纸.zip

    清晰结构的三螺杆泵sw16可编辑_三维3D设计图纸_三维3D设计图纸.zip

    汽轮机低压缸sw22可编辑_三维3D设计图纸_三维3D设计图纸.zip

    汽轮机低压缸sw22可编辑_三维3D设计图纸_三维3D设计图纸.zip

    电磁场仿真:磁热耦合仿真.zip

    电磁领域系列仿真模拟教程,每个包10几个教程,从基础到精通,案例多多。

    蓝桥杯相关资源,入门训练

    蓝桥杯

Global site tag (gtag.js) - Google Analytics