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

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

全部评论

相关推荐

06-27 18:53
门头沟学院 Java
这样才知道自己不适合搞代码,考公去咯
只爱喝白开水:我也发现不适合搞代码,打算转非技术方向了
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
16
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务