Как проверить, удерживает ли поток монитор определённого ресурса?

В Java нет прямого публичного API для проверки, удерживает ли текущий поток монитор конкретного объекта. Однако можно использовать приватный метод класса Thread или обойти через JMX.

Короткий ответ

Что ответить на собеседовании

В Java нет прямого публичного API для проверки, удерживает ли текущий поток монитор конкретного объекта. Однако можно использовать приватный метод класса Thread или обойти через JMX.

Подробный разбор

Ответ с пояснениями

В Java нет прямого публичного API для проверки, удерживает ли текущий поток монитор конкретного объекта. Однако можно использовать приватный метод класса Thread или обойти через JMX.

Проверка с помощью JMX:

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

// Получаем доступ к MBean, управляющему потоками
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

// Получаем информацию о всех потоках
ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(true, true);

// Ищем информацию о текущем потоке
long currentThreadId = Thread.currentThread().getId();
for (ThreadInfo threadInfo : threadInfos) {
    if (threadInfo.getThreadId() == currentThreadId) {
        // Получаем список объектов, мониторы которых удерживаются потоком
        ThreadInfo.LockedSynchronizer[] lockedSynchronizers = threadInfo.getLockedSynchronizers();
        for (ThreadInfo.LockedSynchronizer lockedSynchronizer : lockedSynchronizers) {
            // Сравниваем идентификатор объекта с идентификатором нужного ресурса
            // (здесь нужно получить идентификатор ресурса, например, его хеш-код)
            // if (lockedSynchronizer.getIdentityHashCode() == resource.hashCode()) {
            //     System.out.println("Поток удерживает монитор ресурса");
            //     break;
            // }
        }
        break;
    }
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее