美文网首页
勘误 《Java并发编程之美》P134 关于 NoReentra

勘误 《Java并发编程之美》P134 关于 NoReentra

作者: leeehao | 来源:发表于2020-08-09 03:18 被阅读0次

Java并发编程之美 134 页中生产者和消费者示例缺少 while 循环无法体现 Condition 特性

正确内容

下方仅演示生产者内容

        Thread producer = new Thread(new Runnable() {
            @Override
            public void run() {
                lock.lock();
                try {
                    while (true) {
                        // 如果队列满了,则等待
                        while (queue.size() == queueSize) {
                            notEmpty.await();
                        }
                        // 添加元素
                        queue.add("ele");
                        // 唤醒消费线程
                        notFull.signalAll();
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }
        });

其他读者勘误

http://www.broadview.com.cn/book/5865

Thread producer = new Thread(new Runnable() {
            @Override
            public void run() {
                // while(true)
                while(true) {
                    // 获取独占锁
                    lock.lock();
                    try {
                        // 如果队列满了,则等待
                        while (queue.size() == queueSize) {
                            notEmpty.await();
                        }
                        // 添加元素
                        queue.add("ele");
                        // 唤醒消费线程
                        notFull.signalAll();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        lock.unlock();
                    }
                }
            }
        });

上方代码不够严谨,生产环境中使用 ReentrantLock 在外部 while 循环会导致锁重入次数过多。

相关文章

网友评论

      本文标题:勘误 《Java并发编程之美》P134 关于 NoReentra

      本文链接:https://www.haomeiwen.com/subject/qxokdktx.html