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();
                }
            }
        }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能