作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个类似于生产者-消费者问题的程序。这是我的主要代码:
public class PipeProcessor {
private volatile boolean close = false;
Pipe pipe;
Output out;
public PipeProcessor(Pipe pipe)
{
this.pipe = pipe;
}
public void run()
{
while(!close)
{
out.output(pipe.get());
}
while(pipe.size() > 0)
out.output(pipe.get());
out.close();
}
public void close()
{
close = true;
}
}
Pipe 是 ArrayBlockingQueue 的包装器并充当缓冲区。 Output 是一个类,它获取缓冲区中的元素并将其输出。
我想确保 PipeProcessor 干净地终止,即当它收到关闭信号时,它会清理缓冲区。由于 close() 方法是由关闭 Hook 调用的,因此我确保在处理器关闭时缓冲区不会被填充,这是正确的做法吗?谢谢。
最佳答案
看起来你的代码做了你想要它做的事情。如果你看一下你的命名,你可以让你的代码更容易理解,例如 boolean 值“close”可以被命名为“close”或“shuttingDown”,或者将其反转为“running”,这将导致代码更具可读性。
run() 中的 while 循环及其后面的行可以写为:
while (running || pipe.size() > 0) {
out.output(pipe.get());
}
关于java - 终止前清理缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963028/
我是一名优秀的程序员,十分优秀!