我在这里有这个代码块,我需要确保rankedPlayersWaitingForMatch
正确地在线程之间同步。我打算使用synchronize
,但我认为这不会在这里工作,因为在if
声明中使用了变量。我在网上阅读了关于final Lock lock = new ReentrantLock();
的文章,但我对如何在try/finally
版块中正确使用它有点困惑。我能得到一个简单的例子吗?由于如何在这里使用锁/同步
// start synchronization
if (rankedPlayersWaitingForMatch.get(rankedType).size() >= 2) {
Player player1 = rankedPlayersWaitingForMatch.get(rankedType).remove();
Player player2 = rankedPlayersWaitingForMatch.get(rankedType).remove();
// end synchronization
// ... I don't want this all to be synchronized, just after the first 2 remove()
} else {
// end synchronization
// ...
}
如果执行符合您的需要,也可以使用Collection.synchronizedMap()或java.util.concurrent中的映射类。 –
'但我不认为会在这里工作,因为在if语句中使用了变量'为什么不同步'if'呢? –
@DarthAndroid根本无法帮助他。多个线程可以同时通过'size()> = 2'检查。 –