我想要第二个锁是类型为Collections.synchronizedMap的地图。我怎么有
最佳答案
private ReadWriteLock mapLock = new ReentrantReadWriteLock();
mapLock.writeLock().lock();
try {
final TableManagementInfo table = TABLES.get(mKey);
我做错了吗?
取决于您要执行的操作以及遵循的代码。
您可能应该
finally unlock()
。但是然后有人要问为什么你不想使用synchronized
块(请参见@ WhiteFang34的答案)。另外,如果您在关键部分所做的全部工作是在已并发的映射上调用单个get,则不需要额外的锁定。
另一方面,如果您执行其他操作,则可能首先不需要使用同步地图(其锁定不足)(如果可以在所有有地图的地方使用同步锁,则只需使用外部锁即可)。用过的)。
综上所述,您不想在同步块将要使用时使用ReadWriteLock,也不想在两个将要使用的锁中使用两个锁(使用SynchronizedMap或应用程序级锁,但不能同时使用两者)。