博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程循环输出两个数组(多线程实践)
阅读量:6691 次
发布时间:2019-06-25

本文共 1730 字,大约阅读时间需要 5 分钟。

用两个线程将两个数组轮流输出(数组可能不等长)。输入a1[1,2,3,4],a2[5,6,7,8,9] 输出1,5,2,6,3,7,4,8

轮流输出两个数的实现方法有多种,最简单的可以采用Synchronized来同步实现,如果这是面试场合的题目的话,恐怕不是面试官想要的答案,因为同步意味着效率不高,在这给出利用volatile可见性来实现的轮流输出的功能

public class Main {    //开关    volatile boolean sw = true;    //判断是否有数组已输出完    volatile boolean over = false;    public static void main(String[] args) {        int[] a1 = new int[]{1, 2, 3, 4};        int[] a2 = new int[]{5, 6, 7, 8, 9};        Main test = new Main();        test.process(a1, a2);    }    private void process(int[] a1, int[] a2) {        Thread t1 = new Thread(() -> {            for (int i = 0; i < a1.length; i++) {                while (sw != true && over == false) {                    //自旋;可以加睡眠时间                }                if (sw == true) {                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(a1[i]);                    sw = false;                }            }            over = true;        });        Thread t2 = new Thread(() -> {            for (int i = 0; i < a2.length; i++) {                while (sw != false && over == false) {                    //自旋                }                if (sw == false || over == true) {                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(a2[i]);                    sw = true;                }            }            over = true;        });        t1.start();        t2.start();    }

转载于:https://www.cnblogs.com/keeya/p/9786737.html

你可能感兴趣的文章
Hadoop HBase概念学习系列之HBase里的时间戳(二十六)
查看>>
Android系统关机或几种方式重启
查看>>
Elasticsearch-2.4.3的3节点安装(多种方式图文详解)(含 head、kopf、marvel、shield和watcher插件安装和使用)...
查看>>
ASP.NET MVC3实战系列(一):简单示例
查看>>
Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)...
查看>>
jQuery:1.5.3,表单验证(父级(parent)层次追加(apped))
查看>>
METAL渲染是什么?
查看>>
4.11. 重命名文件名
查看>>
使用现有ECC数据库进行安装或者恢复系统
查看>>
发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)
查看>>
在Ubuntu上单机安装Hadoop
查看>>
安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法
查看>>
存储过程中执行动态Sql语句
查看>>
10 个 SharePoint 2010 实用实验室手册开发指南
查看>>
计算列和的宏
查看>>
(重点)链式栈
查看>>
Linux - 设置SFTP服务用户目录权限
查看>>
[CareerCup] 8.2 Call Center 电话中心
查看>>
android 回调机制实例!
查看>>
分布式监控系统Zabbix-3.0.3--短信报警设置
查看>>