我想以线程安全的方式存储对象列表,同时保持优先级。最初我开始为此使用 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 有一些误解。