分享一个面试题目的解法:多线程打印数组
遇到个面试题,大概是用N个线程,打印一串数组。
分享一个比较清流的写法。
没用到锁。
用volatile设置的状态,每个线程修改数字,把状态交给下一个线程。
如果有需要,我可以解释和证明一下。
加锁的方式有点复杂,面试的时候写起来可能会有差错,这个可能比较简单。
import java.util.*;
public class Main {
static volatile int curr = 0;
static volatile int status = 0;
static final int THREADS = 4;
static final int STOP = 100;
public static void main(String[] args) {
for (int i = 0; i < THREADS; i++) {
final int n = i;
new Thread(() -> {f(n);}, String.valueOf(i)).start();
}
}
public static void f(int number) {
while (curr <= STOP) {
if (status == number && curr <= STOP) {
System.out.println(Thread.currentThread().getName() + "::" + curr);
curr++;
status = (status + 1) % THREADS;
}
}
}
}
