優先度を維持しながら、オブジェクトのリストをスレッドセーフな方法で保存したいと考えています。もともと私はこれに BlockingQueue を使用し始めました。これは、スレッドセーフであり、カスタムの優先順位を維持する機能があるためです。
メソッドを同期する必要があるかどうか疑問に思っていますか? 私のコードは次のようになります:
void addToQueue(SomeObject obj) {
... put it on my priority queue
... do some logging
}
私が気付いたのは、複数のスレッドから addToQueue にアクセスするときに、ログが順不同で発生していることです。だから私は自分のメソッドを次のようにラップしました:
void addToQueue(SomeObject obj) {
syncronized(myMutex) {
... put it on my priority queue
... do some logging
}
}
これにより、ログが整然としているように見えました。したがって、このルートを使用する場合、BlockingQueue を使用せずに Set または List を使用して優先度を自分で管理することで、コードがより効率的になる可能性があるという結論に達しました。
BlockingQueue について誤解しているかもしれません。