我想要第二个锁是类型为Collections.synchronizedMap的地图。我怎么有

最佳答案

private ReadWriteLock mapLock = new ReentrantReadWriteLock();
mapLock.writeLock().lock();
try {
   final TableManagementInfo table = TABLES.get(mKey);



  我做错了吗?


取决于您要执行的操作以及遵循的代码。

您可能应该finally unlock()。但是然后有人要问为什么你不想使用synchronized块(请参见@ WhiteFang34的答案)。

另外,如果您在关键部分所做的全部工作是在已并发的映射上调用单个get,则不需要额外的锁定。

另一方面,如果您执行其他操作,则可能首先不需要使用同步地图(其锁定不足)(如果可以在所有有地图的地方使用同步锁,则只需使用外部锁即可)。用过的)。

综上所述,您不想在同步块将要使用时使用ReadWriteLock,也不想在两个将要使用的锁中使用两个锁(使用SynchronizedMap或应用程序级锁,但不能同时使用两者)。

10-04 18:08