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