zoukankan      html  css  js  c++  java
  • 多线程循环输出两个数组(多线程实践)

    用两个线程将两个数组轮流输出(数组可能不等长)。输入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();
        }
    
  • 相关阅读:
    迭代器
    关于文章cisco漏洞4786
    Python学习目录
    Python的xml模块
    【JS30】Event Capture, Propagation, Bubbling and Once
    mysql安装
    CS193P 第四课笔记 · Hexo
    CSS变量
    在CentOS7上开启和挂载NFS共享
    《Android 编程实战》Chap5_重识IPC
  • 原文地址:https://www.cnblogs.com/keeya/p/9786737.html
Copyright © 2011-2022 走看看