Я читал это: http://tutorials.jenkov.com/java-concurrency/read-write-locks.html
В этом уроке, для написания блокировки чтения для входящего пользователя, был использован следующий код
public class ReadWriteLock{
private Map<Thread, Integer> readingThreads =
new HashMap<Thread, Integer>();
private int writers = 0;
private int writeRequests = 0;
public synchronized void lockRead() throws InterruptedException{
Thread callingThread = Thread.currentThread();
while(! canGrantReadAccess(callingThread)){
wait();
}
readingThreads.put(callingThread,
(getAccessCount(callingThread) + 1));
}
public synchronized void unlockRead(){
Thread callingThread = Thread.currentThread();
int accessCount = getAccessCount(callingThread);
if(accessCount == 1){ readingThreads.remove(callingThread); }
else { readingThreads.put(callingThread, (accessCount -1)); }
notifyAll();
}
private boolean canGrantReadAccess(Thread callingThread){
if(writers > 0) return false;
if(isReader(callingThread) return true;
if(writeRequests > 0) return false;
return true;
}
private int getReadAccessCount(Thread callingThread){
Integer accessCount = readingThreads.get(callingThread);
if(accessCount == null) return 0;
return accessCount.intValue();
}
private boolean isReader(Thread callingThread){
return readingThreads.get(callingThread) != null;
}
}
Так что у меня есть вопрос, могу ли яиспользуйте hashmap, как это
private Map<Thread, Integer> readingThreads =
new HashMap<Thread, Integer>();
Я проверил код класса Thread, чтобы проверить, переопределяет ли он равенства и hashcode, и обнаружил, что это не так.Так будет ли это по умолчанию равно и хэш-код.Так что все будут указывать на одно и то же ведро ??
Может кто-нибудь, пожалуйста, помогите мне понять, как оно будет сопоставлено с ведрами.Кроме того, что нужно со стороны программиста, чтобы использовать объект потока в качестве ключа для hashmap?