Mr.Tan先生 2021-05-20 21:59 采纳率: 25%
浏览 70
已采纳

面试!线程题目求教!!!

题目:要求编写一个程序,启动三个线程,维护一个队列,

a,b线程向队列中添加随机数字,然后等待1秒内,

一直循环。c线程打印队列中新添加的数字。

注:对线程不太了解,今天遇到这个题目,有没有哪个老大哥出个解决方案!!!万分感谢!

  • 写回答

1条回答 默认 最新

  • 3l-li 2021-05-20 23:58
    关注
        /**
         * 参考如下代码
         * @param args
         */
        public static void main(String[] args) {
            LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(16);
    
    // 启动线程a 添加数据
            new Thread(() -> {
                addElement(queue);
            }).start();
    
    // 启动线程b 添加数据
            new Thread(() -> {
                addElement(queue);
            }).start();
    
    // 启动线程c 消费数据
            new Thread(() -> {
                while (true) {
                    try {
    //                    队列为空,阻塞等待。
    //                    队列不为空,从队首获取并移除一个元素,如果消费后还有元素在队列中,继续唤醒下一个消费线程进行元素移除。如果放之前队列是满元素的情况,移除完后要唤醒生产线程进行添加元素。
                        System.out.printf("%d ", queue.take());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
    /**
    * 添加数据
    */
        private static void addElement(Queue<Integer> queue) {
            while (true) {
                queue.offer((int) (Math.random() * 100000));
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景