Как работает ReentrantReadWriteLock
? Это спин-замок?Является ли ReentrantReadWriteLock реализованным как прямая блокировка?
вопрос исходит от Elasticsearch, когда оно показывает
java.lang.ThreadLocal$ThreadLocalMap.expungeStaleEntry(Unknown Source)
java.lang.ThreadLocal$ThreadLocalMap.remove(Unknown Source)
java.lang.ThreadLocal$ThreadLocalMap.access$200(Unknown Source)
java.lang.ThreadLocal.remove(Unknown Source)
java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(Unknown Source)
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(Unknown Source)
в горячих нитях во всех снимках и использование центрального процессора является высоким в то же самое время. Это похоже на спин-замок.
Благодарим за ответ! Да, я все это видел ... Но некоторые люди нагло заявили, что проблема в спин-блокировке, когда они видят такую стеклянную фигуру в моем вопросе. Я сделал копию «ReentrantReadWriteLock» без этих счетчиков удержания в «ThreadLocal», но у меня не было времени на тестирование, потому что изменение GC решило нашу проблему, как это ни странно ... – cybersoft
Не согласитесь ли вы поделиться своей реализацией без удерживать счетчики в ThreadLocal? Я могу использовать его для другой проблемы, которую мы пытаемся решить. –
В этом нет никаких проблем: http://pastebin.com/jXVyk1Db, но это может не сработать, потому что на этих счетчиках есть какая-то логика. Код с этим просто прокомментирован, вы можете посмотреть – cybersoft