分享一个面试题目的解法:多线程打印数组
遇到个面试题,大概是用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; } } } }