Thingking in Java学习笔记 wait() notifyAll()

Screenshot_2026-11-04-16-26-45-46.jpg 立即下载

共享资源是汽车Car,需要不断的打蜡waxed()和抛光buffed(),waxed()要等待buffed()完成,buffed()又要等待waxed()完成 


<pre name="code" class="java">package com.test.concurrent;

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

public class WaxOMatic {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		Car car=new Car();
		ExecutorService exec=Executors.newCachedThreadPool();
		exec.execute(new WaxOn(car));
		exec.execute(new WaxOff(car));
		
		TimeUnit.SECONDS.sleep(1);
		System.out.println("trying to terminate all threads!!!!!");
		exec.shutdownNow();
	}

}
class Car{
	private boolean waxOn=false;
	public synchronized void waxed(){	//打蜡
		System.out.println("waxOn!");
		waxOn=true;
		notifyAll();
	}
	public synchronized void buffed(){	//抛光
		System.out.println("waxOff!");
		waxOn=false;
		notifyAll();
	}
	public synchronized void waitingForWaxing() throws InterruptedException{
		while(false==waxOn){
			System.out.println("waiting for Waxing!");
			wait();
		}
	}
	public synchronized void waitingForBufferring() throws InterruptedException{
		while(true==waxOn){
			System.out.println("waiting for Bufferring!");
			wait();
		}
	}
}
class WaxOn implements Runnable{
	private Car car;
	public WaxOn(Car c){
		car=c;
	}
	@Override
	public void run(){
		try{
			while(!Thread.interrupted()){
				car.waxed();
				TimeUnit.MILLISECONDS.sleep(200);
				car.waitingForBufferring();
			}
		}catch(InterruptedException e){
			System.out.println("waxed interrupt exception");
		}
		System.out.println("waxed car end-------");
	}
}
class WaxOff implements Runnable{
	private Car car;
	public WaxOff(Car c){
		car=c;
	}
	@Override
	public void run(){
		try{
			while(!Thread.interrupted()){
				car.waitingForWaxing();
				car.buffed();
				TimeUnit.MILLISECONDS.sleep(200);
			}
		}catch(InterruptedException e){
			System.out.println("buffed interrupt exception");
		}
		System.out.println("buffed car end-------");
	}
}




输出:

waxOn!
waxOff!
waxOn!
waxOff!
waxOn!
waxOff!
waxOn!
waxOff!
waiting for Waxing!
waxOn!
waxOff!
trying to terminate all threads!!!!!
buffered car end-------
waxed car end-------
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:838]

【动态多智能体系统的通信感知编队控制】一种新颖的通信感知编队控制策略,用于动态多智能体系统研究(Matlab代码、Python代码实现) 内容概要:文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但其内容并未深入介绍Plecs环境下全桥LLC谐振变换器的具体建模与仿真过程,而是呈现为一份涵盖多领域科研主题的资源列表。文档内容广泛涉及多智能体系统控制、无人机路径规划、电力电子变换器、状态估计、信号处理、优化算法等研究方向,并多次提及Matlab/Simulink、Python等工具的代码实现。整体来看,该文档更像是一份科研项目目录或技术资源索引,重点推介了包括LLC谐振变换器在内的多种控制系统与电力电子仿真模型,但对标题所述核心内容缺乏详尽的技术描述与实现细节。; 适合人群:电力电子、自动化、控制工程、信号处理及多智能体系统等相关领域的研究生、科研人员与工程技术人员。; 使用场景及目标:①为科研工作者提供跨学科的技术方向参考与研究选题灵感;②获取电力系统、无人机控制、信号处理等领域成熟的Matlab/Simulink或Python仿真代码资源,用于算法验证与模型复现。; 阅读建议:建议将此文档作为科研资源导航目录使用,读者可根据自身研究方向筛选感兴趣的主题,并通过文中提供的公众号或网盘链接获取完整的代码、仿真模型与配套资料进行深入学习与实践。 立即下载

相关推荐

西门子S7-1200PLC PID_Temp工艺指令在恒温控制中的实战应用

本文详细介绍了西门子S7-1200PLC中PID_Temp工艺指令在恒温控制系统中的实战应用。从硬件选型、安全接线,到TIA Portal软件组态、编程及核心PID_Temp指令调用,手把手指导搭建系统。重点讲解了利用指令自带的预调节与精确调节功能进行PID参数自整定,最终实现高精度、低波动的温度控制,适用于塑料成型、食品烘烤等多种工业场景。

i1j2k的博客 235

Thinking in Java---再谈线程通信

前面写过一篇关于线程通信的博客,但是只是简单的罗列了几种线程通信的形式及语法;这几天又把<>上对应的内容看了一遍,这一篇博客主要结合几个例子说明下几种线程通信方式的特点。 首先还是要明确线程通信要解决的问题是什么:考虑这么一个情况,我们现在要对一台车进行涂蜡和抛光,并且在进行抛光之前一定要保证已涂蜡,且在涂另一层蜡的时候,又要保证已经抛光;现在我们我们开启两个线程,一个负责涂蜡,另一个负责抛光;要

荒野孤鹰 1765

【HAL库-STM】智能温控按键小风扇【胎教级教学】

硬件设备:DHT11,0.96寸oled屏,二/三/四线风扇(不挑),面包板 、f10的精英板等等。当人在的风扇面前时可以自行控制风扇,不在面前时又想开风扇就让他温控自行开启,(在这里有一个想法就是加上蓝牙和wifi控制的功能能够远程遥控,这个如果做的再全一点就要自主研发是一个多功能app,这里没有做。针对这个dht11,我一开始是卡在了这个check函数里面,一直是我给完dht11低电平和高电平后,dht11不回复我低电平和高电平,这个不是我的问题,当时代码是没毛病的,这个点一直卡着我。吐血五天实现小成品

weixin_52451652的博客 1740

thinking in java 04

线程的状态:                                       1.新建(new)  :分配了系统必要的资源,并执行了初始化,有资格获得CPU时间了       2.就绪(runnable):只要获得时间片就能执行    3. 阻塞(Blocked): 线程能够运行但被某个条件终止,不会分配CPU时间    4.死亡(Dead):处于死亡状态的线程

fuckluy的博客 481

【NAS系统】DSM7.2部署SVN服务

早期的群晖版本可以在套件中心找到SVN Server直接安装,然后配置仓库和用户。但‌2提到DSM7.0之后套件中心没有SVN了,得用Docker。

qq_38350004的博客 4849

ERDAS 2022与ArcGIS共存安装教程:如何避免端口冲突(详细配置步骤)

本文提供了一份详细的ERDAS 2022与ArcGIS共存安装教程,核心在于解决两者因FlexNet许可证服务器导致的端口冲突问题。通过分步指导,包括检查现有端口占用、修改ERDAS许可证文件端口号、配置防火墙及客户端设置,确保两款专业GIS与遥感软件能在同一系统上稳定运行。

weixin_29279047的博客 253

01:SpringAI

ai

weixin_43761434的博客 422

相衬成像介绍

相衬成像介绍

qq_41981768的博客 2913

Thinking in Java学习笔记 DelayQueue和Delayed接口

DelayedTask线程要实现Delayed接口的getDelay()和compareTo()方法,放入DelayQueue队列后,通过take()方法取出时,可根据compareTo方法制定的顺序来优先取出线程执行 静态类EndSentinel负责遍历所有的线程,其设置的trigger最大,最后被执行时调用ExecutorService.shutdownNow(),来结束线程的执行

fantasyagain的专栏 1万+

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5384

小论文/大论文必备| YOLO26热力图可视化,支持8种常用热力图方法:GradCAM,GradCAMPlusPlus,XGradCAM,EigenCAM,HiResCAM等,助力小论文和大论文加分

本文介绍了如何为YOLO26模型添加热力图可视化功能,包括完整代码和使用教程。热力图能增强模型的可解释性,适用于论文中的实验对比和结果展示。文章提供了详细的代码实现,包含图像处理、热力图生成和结果可视化等功能,并指导用户如何创建Python文件、粘贴代码以及调整参数生成最佳热力图。通过设置不同层号,用户可以灵活控制热力图效果,最终结果将保存在指定文件夹中。

Ai缝合怪、助力小伙伴高效发论文 493

Thinking in Java学习笔记,可以被Future.cancel()中断的资源

线程sleep是可以被Future.cacel()中断的 线程中的IO阻塞时,线程无法被Future.cancel()中断 线程中的synchronized锁阻塞时,线程无法被Future.cancel()方法中断 package com.test.concurrent; import java.io.IOException; import java.io.InputStr

fantasyagain的专栏 6812

大模型安全研究论文整理 2026年版

知乎博主小红书博主GitHub数据集参考: 大模型越狱指令 (harmful questions) 数据集整理会思考的大模型更不听话,我的豆包失控了…让QwQ思考模型-不思考的小技巧qwen3的致命幻觉!大模型微调所有大模型都在讨好人类不要思考过程,推理模型能力能够更强丨UC伯克利等最新研究o3/o4-mini幻觉暴增2-3倍!OpenAI官方承认暂无法解释原因UC伯克利:让推理模型少思考,准确率反而更高了!一句话让DeepSeek思考停不下来,北大团队:这是针对AI的DDoS攻击慢思考准确率反降30%!普

CSPhD-winston的博客 2035

Java并发多线程常用包、类和接口

Java.util.concurrent.locks.Lock          Lock接口          ReadWriteLock接口          Condition接口          ReentrantLock Java.util.concurrent.atomic          AtomicInteger AtomicLong AtomicReferen

fantasyagain的专栏 3774

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

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Thinking in Java学习笔记Daemon线程和ThreadFactory接口

Daemon线程在主线程执行完毕后就会自动结束,设置Daemon线程setDaemon方法需要在run之前 ThreadFactory接口只有一个newThread方法,接受一个Runnable的实例对象,用以实现自定义的线程 package com.test.concurrent; import java.util.concurrent.ExecutorService; i

fantasyagain的专栏 1974

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Thinking in java 哲学家进食问题

DeadlockingDiningPhilosopher.java 哲学家围着圆桌坐下,左右各有一根筷子,需要同时拥有左右筷子才能进食。 筷子是共享资源,使用和释放资源需要加锁处理。如果所有的哲学界都是先取左边的筷子,就会导致每个哲学家都有一根筷子,等待自己右边的哲学家释放筷子,从而陷入死锁的状态。 package com.test.concurrent; import java.util

fantasyagain的专栏 1562

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Thinking in Java学习笔记 Semaphore控制的资源池

SemaphoreDemo.java 一个资源池Pool,可以由多个线程检出和检入其中的资源,由Semaphore控制同步问题,由数组来记录每个资源的检出/检入状态 CheckoutTask这个线程,启动多个,负责检入检出资源。 资源类Fat,有比较复杂的计算 同时在main()方法中对资源进行了检出和检入操作 package com.test.concu

fantasyagain的专栏 1173

Thinking inJava学习笔记 HorseRace.java

HorseRace.java 每个horse每走一步,都会停下来等待其他horse完成这一步操作 cyclicBarrier的线程会在每一步所有horse完成操作后执行一次 package com.test.concurrent; import java.util.ArrayList; import java.util.List; import java.util.Random; impo

fantasyagain的专栏 1036

Thinking in Java学习笔记 吐司的制作和消费过程

多个LinkedBlockingQueue队列,每个流程都有一个或两个队列,从上一个流程的队列中获取吐司,本流程处理完毕之后放入下一流程的队列 每个流程通过LinkedBlockingQueue.take()方法取队列中的任务时,如果上一个流程没有完成任务,队列是空的,则会堵塞在take()方法这里 源码如下: public E take() throws InterruptedExcept

fantasyagain的专栏 912

java编程思想并发学习笔记(rocket and rockets)

TestBlockingQueue.java package com.test.concurrent; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import

fantasyagain的专栏 810

Thinking in Java学习笔记,使用Exchanger交换资源

生产者生产出的产品放入生产者队列,消费者等待消费者队列和生产者队列完成交换 package com.test.concurrent; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurren

fantasyagain的专栏 791

Thinking in Java学习笔记 Thread.UncaughtExceptionHandler接口实现捕获线程内异常

实现自定义类来实现Thread.UncaughtExceptionHandler接口,在unCaughtExceptionHandler方法中编写自已需要的处理代码 实现自定义的ThreadFactory,newThread的时候调用setUncaughtExceptionHandler方法来指定自定义的UncaughtExceptionHandler 使用自定的ThreadFactory来创

fantasyagain的专栏 742

Thinking in Java学习笔记

LinkedBlockingQueue ArrayBlockingQueue SynchronizedBlockingQueue TestBlockingQueue.java package com.test.concurrent; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurr

fantasyagain的专栏 741

Thinking in Java学习笔记,简单包装Thread,实现快速实现线程

package com.test.concurrent; public class SimpleThread extends Thread { private static int counter=0; private int countDown=5; public SimpleThread(){ super(String.valueOf(counter++)); run();

fantasyagain的专栏 722

Thinking in Java学习笔记 CountDownLatch(CountDownLatchDemo.java)

CountDownLatchDemo.java 每个任务线程完成一部分工作,完成后通过CountDownLatch来通知总线程, 总线程通过CountDownLatch.await()等待所有子线程完成操作后,再结束 package com.test.concurrent; import java.util.Random; import java.util.concurrent.Count

fantasyagain的专栏 662
上一篇: Thinking in Java学习笔记,可以被Future.cancel()中断的资源
下一篇: Thinking In Java学习笔记之目录实用工具
fantasyagain
博客等级 码龄19年 18粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值