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

daily-stock-analysis(Python) 「daily_stock_analysis(Python)」是后台管理系统(Python)。项目简介:LLM 驱动的多市场股票智能分析系统:多源行情、实时新闻、决策看板与自动推送,支持零成本定时运行。 LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.源码完整,下载解压即可查看使用,适合学习参考、课程设计与二次开发。 立即下载


生产者生产出的产品放入生产者队列,消费者等待消费者队列和生产者队列完成交换


package com.test.concurrent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ExchangerDemo {
	static int size=10;
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		List<Fat> produceList=new CopyOnWriteArrayList<Fat>();
		List<Fat> consumeList=new CopyOnWriteArrayList<Fat>();
		Exchanger<List<Fat>> xc=new Exchanger<List<Fat>>(); 
		ExecutorService exec=Executors.newCachedThreadPool();
		exec.execute(new ExchangerProducer(xc,BasicGenerator.create(Fat.class),produceList));
		exec.execute(new ExchangerConsumer(consumeList,xc));
		
		TimeUnit.SECONDS.sleep(5);
		exec.shutdownNow();
	}

}
class ExchangerProducer<T> implements Runnable{
	private List<T> holder;
	private Exchanger<List<T>> exchanger;
	private Generator<T> generator;
	public ExchangerProducer(Exchanger<List<T>> exchanger,Generator<T> generator,List<T> holder){
		this.exchanger=exchanger;
		this.holder=holder;
		this.generator=generator;
	}
	@Override
	public void run(){
		try {
			while(!Thread.interrupted()){
				for(int i=0;i<ExchangerDemo.size;i++){
					holder.add(generator.next());
				}
				holder=exchanger.exchange(holder);
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
class ExchangerConsumer<T> implements Runnable{
	private Exchanger<List<T>> exchanger;
	private List<T> holder;
	private volatile T value;
	ExchangerConsumer(List<T> holder, Exchanger<List<T>> exchanger){
		this.holder=holder;
		this.exchanger=exchanger;
	}
	@Override
	public void run(){
		try{
			while(!Thread.interrupted()){
				holder=exchanger.exchange(holder);
				for(T t:holder){
					value=t;
					holder.remove(t);
				}
			}
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		System.out.println("Consume Final value: "+value);
	}
}
class Fat{
	private volatile double d; //prevent optimization
	private static int counter=0;
	private final int id=counter++;
	public Fat(){
		for(int i=0;i<10000;i++){
			d+=(Math.PI+Math.E);
		}
	}
	public String toString(){
		return "Fat id: "+id+"  D:"+d;
	}
	public void operation(){
		System.out.println(this);
	}
}
interface Generator<T>{
	T next();
}
class BasicGenerator<T> implements Generator<T>{
	private Class<T> type;
	public BasicGenerator(Class<T> type){
		this.type=type;
	}
	public T next(){
		try {
			return type.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	public static <T> Generator<T> create(Class<T> type){
		return new BasicGenerator<T>(type);
	}
}


输出:


java.lang.InterruptedException
at java.util.concurrent.Exchanger.exchange(Unknown Source)
at com.test.concurrent.ExchangerProducer.run(ExchangerDemo.java:43)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.lang.InterruptedException
at java.util.concurrent.Exchanger.exchange(Unknown Source)
at com.test.concurrent.ExchangerConsumer.run(ExchangerDemo.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Consume Final value: Fat id: 319279  D:58598.74482048422

工具调用智能体可靠性基准数据集验证门重试 面向工具调用型AI智能体可靠性研究的合成基准数据集,研究预执行验证门与有限重试机制如何改变智能体任务完成率、无效动作率与调用成本。包含120张合成工单、1440个模拟回合(4种策略×3种工具故障率)与本地大语言模型试点实验(qwen2.5:3b)。实验结果显示:10%工具故障率下基线策略完成率仅30.0%,验证门加重试组合达97.5%;大模型试点中无防护时8张工单完成5张,加防护后8张全部完成。附结果明细、策略汇总、实验元数据与README共8个文件。适用于智能体工程、工具调用可靠性评估、防护机制设计与大模型应用研究。数据许可:CC0公共领域。 立即下载

相关推荐

Python 批量处理大量压缩包|递归嵌套解压 zip rar 7z tar,文件名乱码修复,扫描残留压缩包工具

在收集大量计算机源码时,经常遇到海量多层嵌套压缩包:zip、rar、7z、tar、tar‑gz 混杂,老压缩包中文文件名 GBK 编码解压出现乱码,解压完成后不确定目录内是否还有遗留未解压的压缩包。 本工具集由 3 份 Python 脚本组成,专门针对大批量源码文件夹做自动化预处理,不用手动一个个解压,自动递归遍历所有子目录,处理嵌套压缩包,修复中文文件名乱码,扫描校验残留压缩包,输出完整处理日志。 前置条件 - Python3.8 及以上环境 - 如果要处理 rar/7z 格式:电脑安装 **7‑Zip**,记录 7z.exe 的完整路径,填到 `jieyarar.py` 配置区。 1. 修改每个脚本顶部配置区:`SCAN_ROOT / TARGET_FOLDER` 修改为你存放文件的根目录绝对路径(Windows 路径字符串前面加 r,例如 `r"F:\files\download"`) 2. 第一步:运行 `main.py`,优先处理全部 zip 压缩包,执行完成查看生成的 `unzip_log.txt` 日志; 3. 第二步:运行 `jieyarar.py`,处理 rar、7z、tar 等其它格式压缩包,查看 `unpack_all_archive_log.txt`; 4. 第三步:运行 `checkfiel.py`,全盘扫描校验,输出 `scan_archive_and_badname.txt`; - 查看报告:确认是否还有残留压缩包、是否存在乱码文件名; 5. 根据日志,手动单独处理加密、损坏的压缩包。

Thinking In Java 学习笔记 21.并发

线程优先级 进程与线程后台(daemon)线程main()是非后台线程在每个线程对象上附着一个异常处理器捕获异常Thread.UncaughtExceptionHandler共享资源竞争互斥量 mutexvolatile关键字保证域可见性,当类中只有一个可变的域时,volatile是安全的使用synchronized关键字使用显示的Lock对象原子性与易变性临界区:...

越努力, 466

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8351

think-in-java(21)并发

【21.2】基本线程机制 并发编码使我们可以将程序划分为多个分离的,独立运行的任务; cpu将轮流给每个任务分配其占用时间。 【21.2.1】定义任务 线程可以驱动任务,一种描述任务的方式是使用 Runnable 接口; 方式1:直接调用 Runnalbe接口的run 方法创建线程驱动任务; /** * 用 Runnable 接口定义任务 */ public class ...

PacosonSWJTU的博客 551

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3532

Sentaurus TCAD建模:宽温区n型FinFET模型校准与低温仿真分析

本文基于Sentaurus TCAD平台,建立了n型FinFET的宽温区(233K-393K)仿真模型,解决了低温(73K-193K)仿真失效问题。研究对比了Sprocess工艺仿真与SDE几何建模两种方法,分析了载流子冻析效应、不完全电离和迁移率退化等低温物理机制。通过优化模型参数,实现了在233K、313K和393K条件下仿真误差小于10%,并建立了符合物理趋势的低温外推模型。研究提供了完整的Sentaurus TCAD代码实现,包括器件结构定义、物理模型配置和温度相关参数校准,为宽温区FinFET仿真

huanghm88的专栏 264

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

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

fantasyagain的专栏 1万+

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1220

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

在 SAP 中启用应收/应付“代扣税(Withholding Tax)”功能,本质上是激活并配置“扩展代扣税(Extended Withholding Tax)”模型

摘要:SAP中启用应收/应付代扣税功能需完成3个层级12个核心步骤:1)全局激活公司代码代扣税功能;2)配置代扣税规则、税率和科目,包括定义税种类型、代码、总账科目等;3)在供应商/客户主数据中关联代扣税设置。完成后系统可在发票或付款环节自动计算并过账代扣税,支持多税种并行计算和税率年度调整,最终生成税务报表。常见问题排查需检查公司代码激活状态和主数据配置。(149字)

金牌架构师 836

《UDS协议从入门到精通》系列——图解0x14:清除诊断信息

图解0x14:清除诊断信息,简洁易懂,迅速上手!

车载系统攻城狮 4825

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

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

fantasyagain的专栏 3774

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

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

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

fantasyagain的专栏 1974

DeepFashion 服装识别:基于 YOLOv10 的深度学习实现与 UI 界面开发

随着深度学习的发展,目标检测算法在服装识别任务中表现出色,特别是 YOLO(You Only Look Once)系列模型。服装识别(Fashion Recognition)是计算机视觉领域的重要任务,广泛应用于。已提供,可用于服装分类、款式识别、虚拟试衣等应用。训练服装识别模型,并开发。

YOLO 803

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Thinking in java 哲学家进食问题

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

fantasyagain的专栏 1562

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

fantasyagain的专栏 1173

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

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

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

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

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学习笔记 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

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

共享资源是汽车Car,需要不断的打蜡waxed()和抛光buffed(),waxed()要等待buffed()完成,buffed()又要等待waxed()完成  package com.test.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;

fantasyagain的专栏 682

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学习笔记 Semaphore控制的资源池
下一篇: Thinking in Java学习笔记Daemon线程和ThreadFactory接口
fantasyagain
博客等级 码龄19年 18粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值