Вне виртуальной машины вы можете использовать инструмент jstack для получения полной информации о потоках для каждого потока или подключения к JMX и изучения MBeans Thread.
Ответ 2
Мой короткий ответ будет "нет, не надежно".
Кто-то упомянул проверку getState() == Thread.State.BLOCKED. Однако, к тому времени, как вы получите ответ, он может быть уже устаревшим, если заблокированный поток ожидает на мониторе, заблокированном третьим потоком, и монитор будет выпущен так же, как getState вот-вот вернется.
Ответ 3
Я не знаю, знаете ли вы это. Но вы можете сделать Thread.currentThread(), который сообщит вам поток, который выполняет этот метод.
Ответ 4
Thread t1 = new Thread();
Thread.State state = t1.getState();