多线程交替执行
来源:互联网 发布:手机游戏端口 编辑:程序博客网 时间:2024/06/06 13:10
场景:
由于业务需要多线程并发操作,并且多线程之间是有一定的依赖关系,比如A线程存储数据,B线程则解析数据,即B线程是需要在A 线程执行完之后才开始执行,同样A线程存储数据的也需要B线程对数据解析完成后才开始存储新的数据,因此A与B两个线程就形成了交替实现,当然具体情况比这个复杂一些,但是大致逻辑类似。
过程就是:A=>B=>A=>B=>....如此循环...
其实该动作和队列类似,即生产者和消费者,队列长度确定,每生产一个就消费一个,确保消费完成后才生产,不过这次实现没有用到队列类库去实现,使用多线程亦可以完成,
于是可以使用synchronized和volatile来实现,
具体实现
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 (isChange) {wait();}System.out.println("☆☆☆☆☆");isChange = true;notifyAll();}}
2、创建A和B两个线程
public class ThreadA extends Thread {private ExChangeTest change;public ThreadA(ExChangeTest change) {this.change = change;}public void run() {try {change.methodA();} catch (Exception e) {e.printStackTrace();}}}public class ThreadB extends Thread {private ExChangeTest change;public ThreadB(ExChangeTest change) {this.change = change;}public void run() {try {change.methodB();} catch (Exception e) {e.printStackTrace();}}}
3、运行入口Client
public class Client {public static void main(String[] args) {// 创建具体业务逻辑处理类ExChangeTest tool = new ExChangeTest();// 创建5个线程,A与B线程各5个,分别交替执行for (int i = 1; i < 6; i++) {ThreadA tA = new ThreadA(tool);tA.start();ThreadB tB = new ThreadB(tool);tB.start();}}}
以上代码运行之后,完成实现线程交替动作,如下输出:
★★★★★
☆☆☆☆☆
★★★★★
☆☆☆☆☆
★★★★★
☆☆☆☆☆
★★★★★
☆☆☆☆☆
★★★★★
☆☆☆☆☆
阅读全文
0 0
- 多线程交替执行
- 【多线程】两个线程 交替执行
- Java多线程的交替执行
- Java多线程交替执行任务
- java多线程问题,线程交替执行
- 交替执行
- 两个线程交替执行
- 两个线程交替执行
- 多线程交替输出数据
- 多线程交替打印数字
- 多线程交替打印数字
- Java多线程——thread及runnable的基本使用及交替执行
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- java多线程 典型案例:子线程执行10次,主线程执行100次,两者交替50次
- 线程交替执行的代码
- 线程交替有序执行任务
- oracle 有关行转列,以及过程的使用示例
- 欢迎使用CSDN-markdown编辑器
- C#进阶 17 Try-Catch 异常处理
- 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
- java 防止 XSS 攻击的常用方法总结.
- 多线程交替执行
- unity消息系统机制,工具类可以直接使用
- 阿斯麦电面 面经(附自己的一些总结)
- HTML表单元素
- 为服务器上的图片生成二维码
- IntellJ IDEA+Spring Boot+JSP
- 关于js的报错处理
- lua写入一个不确定是否存在文件的方法
- 求树的直径