用两个线程将两个数组轮流输出(数组可能不等长)。输入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(); }