多线程定时器随即输出的数为什么都一样

题目:一个线程每秒输出一个随机数到一个共享队列,3个线程每2秒从队列头部获取这个随机数,并打印出来

img

能否打出程序,我想学习一下思路


public static void main(String[] args) {

        LinkedBlockingQueue queue = new LinkedBlockingQueue();

        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Random random = new Random();
                int num = random.nextInt(1000);
                queue.add(num);
                System.out.println(Thread.currentThread().getName()+"插入队列的随机数为"+num);
            }
        },0,1000);


        for (int i = 0; i < 3; i++) {
            Timer timer2 = new Timer();
            timer2.schedule(new TimerTask() {
                @SneakyThrows
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"取出的队首数为"+ queue.take());
                }
            },0,2000);
        }
    }

点赞关注+采纳

图片和标题有关系吧。
因为你的random写在线程的外面了,而不是写在run方法里面,当然就是同一个值了。

你这代码写得跟题一点都不沾边呀