并发编程处理实战篇6:多线程交替执行

news/2024/5/17 18:15:31 标签: synchronized, volatile, Client

场景:

由于业务需要多线程并发操作,并且多线程之间是有一定的依赖关系,比如A线程存储数据,B线程则解析数据,即B线程是需要在A 线程执行完之后才开始执行,同样A线程存储数据的也需要B线程对数据解析完成后才开始存储新的数据,因此A与B两个线程就形成了交替实现,当然具体情况比这个复杂一些,但是大致逻辑类似。

过程就是:A=>B=>A=>B=>....如此循环...

 

其实该动作和队列类似,即生产者和消费者,队列长度确定,每生产一个就消费一个,确保消费完成后才生产,不过这次实现没有用到队列类库去实现,使用多线程亦可以完成,

于是可以使用synchronizedvolatile来实现,

 

具体实现

1、具体业务处理类

public class ExChangeTest {
 
	// 使用volatile变量来做判断
	private volatile boolean isChange = true;
 
	// 线程A业务处理,如:存储数据任务
	public synchronized void methodA() throws Exception {
		while (!isChange) {
			// 等待
			wait();
		}
		System.out.println("★★★★★");
		isChange = false;
		// 唤醒线程
		notifyAll();
	}
 
	// 线程B业务处理,如:解析数据任务
	public synchronized void methodB() throws Exception {
		while (isC

http://www.niftyadmin.cn/n/1554990.html

相关文章

卸载cuda_NVIDIA宣布CUDA支持Arm,用于构建百万兆级AI超级计算机

6月17日消息,NVIDIA周一宣布支持Arm CPU,为高性能计算行业开辟了一条全新途径,以构建具有极高能效水平的百万兆级AI超级计算机。NVIDIA将于年底前向Arm生态系统提供全堆栈的AI和HPC软件,该堆栈为600多个HPC应用程序和所有AI框架提…

javaweb课堂练习继承与重写怎么做_Java继承

Java不像C,Python那样支持多继承,Java只支持单继承,但是可以多实现。先看变量在继承当中的情况如果要查看父类的num怎么办呢? 用 super。this代表的是本类对象的引用,super代表的是父类对象的引用。子类访问本类中的成…

并发编程处理实战篇7:java线程停止interrupt

说明: 线程在运行过程中可能需要根据条件判断进行停止,从api上开是可以使用stop方法强制终止线程,但是官方不推荐这个方法,这个是作废过期的方法,因为如果强制让线程停止则有可能使一些清理性的工作得不到完成,同时对锁定的对象进行了“解锁”,有可能导致数据得不到同步…

11纯代码 oc xcode_Xcode11 创建了一个oc项目,加载提示框位置(0,0) 大哥们怎么解决...

Xcode 版本更新新增了SceneDelegate,SVProgressHUD的作者在设置HUDView的中心位置时使用的是UIApplication.sharedApplication.delegate.window.bounds 获取的,而版本更新之后获取不到正确的rect,因此把这部分代码进行调整。(鄙人测试没问题)…

java quartz mybatisplus_JNPF快速开发平台-简单快速高效开发java项目

JNPF快速开发平台JNPF快速开发平台采用前后端分离技术、采用B/S架构开发,形成一站式开发多端(APPPC)使用。使用JNPF开发平台可以简单、快速、高效的构建各种类型java项目。JAVA版介绍JNPF.java版采用前后端分离,可将代码直接导入i…

并发编程处理实战篇8:线程方法join()和sleep()区别

描述: 方法join()的作用是使所属的线程对象x正常执行run()方法,而使当前线程z进行无限期的阻塞,等待线程x销毁后再继续执行当前现在z后面的代码。 join还有join(long)方法,即:long为设置等待的时间, 1、j…

白盒基本路径发测试实验报告_【测试基础】白盒测试之循环路径测试

从是否关注程序内部的结构的角度出发可以测试类型划分为:白盒测试、黑盒测试和灰盒测试,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对…

并发编程处理实战篇9:线程本地变量ThreadLocal

PS: 关于多线程共享变量ThreadLocal<T> 变量值的共享可以使用public static 变量的形式,所有的线程都可以使用同一个public static变量。如果想实现每一个线程都有自己的共享变量,如何实现? JDK中提供了类ThreadLocal<T>可以解决这样的问题。原理: ThreadL…