如果Java线程已经被该线程占用,为什么它必须重新进入锁?

如果Java线程已经被该线程占用,为什么它必须重新进入锁?,java,multithreading,locks,reentrantlock,Java,Multithreading,Locks,Reentrantlock,我在读关于Java线程和可重入锁的书。ReentrantLock允许线程多次进入资源锁。我的问题是,如果线程已经锁定了资源,为什么线程必须这样做?“重返”的目的是什么 假设一个类中有两个状态变量: @GuardedBy("this") List<String> countryList = new ArrayList<>(); @GuardedBy("this") Map<String,String> countryCapitalMap = new Arra

我在读关于Java线程和可重入锁的书。ReentrantLock允许线程多次进入资源锁。我的问题是,如果线程已经锁定了资源,为什么线程必须这样做?“重返”的目的是什么

假设一个类中有两个状态变量:

@GuardedBy("this")
List<String> countryList = new ArrayList<>();

@GuardedBy("this")
Map<String,String> countryCapitalMap  = new ArrayList<>();

可重入锁只需获取一次锁,线程就可以访问这两种方法。

谢谢。但我一直在寻找可重入性的目的,而不是它是如何实现的。其目的是在线程想要访问由他已经持有的锁保护的资源时避免死锁——我链接的重复问题中也解释了这一点……如果你阅读了接受的答案,你会发现它涵盖了这一点也是。你最好写实际的代码,而不仅仅是注释。添加了一些代码。谢谢
private synchronized insertCapital(String country, String city) {
    this.countryCapitalMap.put(country, city);
}

private synchronized getRandomCountry() {
   int randomInt = ...//randomly generated number
   return this.countryList.get(randomInt);
}