私は生産者/消費者問題に似たプログラムを書いています。これが私のメインコードです:
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;
}
}
パイプはArrayBlockingQueueのラッパーであり、バッファーとして機能します。Outputは、バッファ内の要素を取得して出力するクラスです。
PipeProcessorが正常に終了することを確認したい。つまり、閉じるように通知されたときに、バッファーをクリーンアップする。close()メソッドはシャットダウンフックによって呼び出されるため、プロセッサが閉じている間はバッファがいっぱいになっていないことを確認しています。これは正しい方法ですか?ありがとうございました。