分享一个面试题目的解法:多线程打印数组

遇到个面试题,大概是用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;
            }
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务