Операционная среда этого руководства: система Windows7, версия Java10, компьютер DELL G3.
1. Концепция
Реентерабельная блокировка чтения-записи . Блокировка чтения-записи поддерживает внутренние блокировки чтения и записи . Нижний уровень по-прежнему является AQS, но AQS имеет только одну величину состояния. Как управлять чтением и записью одновременно. состояния (int) здесь используется бит представляет статус чтения, младшие 16 бит представляют запись, старшие 16 бит представляют количество потоков, получивших блокировку чтения, а младшие 16 бит представляют номер повторного входа блокировки записи. .
2. Принцип
Реализовано с использованием очереди CAS+AQS . Он поддерживает справедливые и нечестные блокировки, и их реализация аналогична.
3. Примеры
публичный класс ReentrantDemo реализует Runnable { Блокировка блокировки = новый ReentrantLock(); @Override общественный недействительный запуск () { набор(); } общественный недействительный набор () { пытаться { блокировка.блокировка(); System.out.println("установить метод"); получать(); } catch (Исключение е) { е.printStackTrace(); } окончательно { lock.unlock();//Должно быть освобождено наконец } } общественная недействительность get() { пытаться { блокировка.блокировка(); System.out.println("получить метод"); } catch (Исключение е) { е.printStackTrace(); } окончательно { блокировка.разблокировка(); } } public static void main(String[] args) { ReentrantDemo reentrantDemo = новый ReentrantDemo(); новый поток (reentrantDemo).start(); } }
Выше приведен реентерабельный тест Java ReentrantLock. Я считаю, что после прочтения всей статьи каждый сможет изначально понять использование ReentrantLock, а также вы сможете расширить связанное с ним содержимое реентерабельной блокировки после класса.