ConcurrentLinkedQueueやBlockingQueueなどの組み込みキューのいずれかを使用すると、単一コールはアトミックであり、スレッドセーフであることが保証されます。 しかし、時にAPIへの呼び出し5の、4つの呼び出しは、単一のですが、1つの呼び出しの形式は次のとおりです。ConcurrentLinkedQueueを非アトミック操作で使用する
if(some condition)
{
queue.call();
}
この操作は非アトミックであるため、この呼び出しは同期ブロックにする必要があります。 しかし、この呼び出しを導入しても、このキューへのすべてのアクセスは、読み書きかどうかは関係ありません。
もしそうなら、コード内で非アトミックな呼び出しが1回起きたら、その可能性が高いと思いますが、ファンシーキューへのアクセスはすべて手動で同期する必要がありますか?
条件はなんですか?それはキューに関連していますか? – axtavt
はい、queue.isEmpty()のようなものです。 –
正しく使用すると、キューを同期する必要はありません。あなたがExecutorServiceを使用している場合、キューを直接使用する必要はまれです。 –