заняты ожидания темы в Java - PullRequest
2 голосов
/ 14 мая 2009

У меня есть назначение с потоками, и я не могу заставить потоки переходить в состояние ожидания занятости. Как узнать, находится ли поток в состоянии блокировки или в состоянии ожидания занятости? Есть команда, которая проверяет это?

В программе у меня есть 2 матрицы, и мне нужно их преобразовать. Итак, у меня есть поток преобразования и код выглядит следующим образом:

transformThread transformThreadFirst = new transformThread(firstMat, n);
transformThread transformThreadSecond = new transformThread(secondMat, n);

transformThreadFirst.start();
transformThreadSecond.start();

try
{
    transformThreadFirst.join();
    transformThreadSecond.join();
}
catch(InterruptedException e)
{
}

Любой из потоков будет в состоянии ожидания или это нормально? Или у вас есть лучшее решение? Также при запуске transformThread я не использую выход, только 2 для циклов, вот и все, только действие преобразования ..

Ответы [ 2 ]

8 голосов
/ 14 мая 2009

Ожидание при занятости что-то делает несколько раз, пока не завершится другая операция. Примерно так:

// The next line will be called many many times
// before the other thread finishes
while (otherThread.getState() == Thread.State.RUNNABLE) {}

Таким образом, ваш код не занят ожиданием, текущий поток будет блокироваться до завершения transformThreadFirst, а затем - до завершения transformThreadSecond.

1 голос
/ 14 мая 2009

Есть утилита jstack. используйте его как jstack <pid>, передавая идентификатор процесса вашего запущенного jvm. Он будет отображать то, что делает каждый поток в этом приложении, вместе со статусом потока (RUNNING, WAITING, BLOCKED).

В комплекте с JDK и находится в его корзине /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...