1

プロパティとして LinkedBlockingQueue を持つクラス A があります。A の 1 つのメソッドでは、アイテムをキューに挿入したいので、LinkedBlockingQueue.put() メソッドを呼び出します。ただし、キューがいっぱいの場合、スレッドはスペースが利用可能になるか、スレッドが中断されるまで待機します。

問題は、スレッドが中断された場合でも、アイテムをキューに入れたいということです。

アイテムがキューに挿入されたことを確認する方法はありますか?

ありがとう

4

2 に答える 2

3

キューがいっぱいになった場合に待機するかどうかを決定する必要があります。設定した場合、最大長を無視するように指示することはできません。

できることは、代わりにキューが大きすぎる場合にプロデューサーを遅くすることです。これにより、必要に応じて最大値を「無視」できます。たとえば、割り込み時。

于 2012-06-13T15:54:17.740 に答える
2

私が見る唯一の方法は、ループで queue.put() を呼び出すことです。この先多分

boolean added = false;

while ( !added){
    try{
        queue.put(value);
        added = true;
    }catch(InterruptedException ie){
        // do something if required

        // make sure to set the interrupted flag on the thread, since it was cleared
        // when the exception was thrown
        Thread.currentThread().interrupt();
    }
}

if(Thread.currentThread.isInterrupted()){
    // you were previously interrupted before, so try to exit gracefully
    return;
}
于 2012-06-13T15:58:28.210 に答える