Состояние потока после вызова Wait(Timeout)

Sep 06, 2009 01:31

Есть несколько потоков завязанных посредством synchronized на один и тот же объект 0x00007f6ccdc374c0
Все они кроме одного находятся в состоянии WAITING на получении блокировки на 0x00007f6ccdc374c0

Оставшийся поток, работает аналогично таймеру: делает полезную работу, затем выполняет Wait(timeout ) на 0x00007f6ccdc374c0
и так далее периодически.

Read more... )

java, threads

Leave a comment

kgeorgiy September 6 2009, 06:08:18 UTC
Метод obj.wait в первом приближении можно рассматривать как последоватьность из трех действий (JLS 3, 17.8.1):
  1. obj.unlock() -- снятие блокировки;
  2. obj.await() -- ожидание извещения, поток находится в состоянии WAITING;
  3. obj.lock() -- повторное взятие блокировки, поток находится в состоянии BLOCKED;
Таким образом, в процесс вызова метода wait могут наблюдаться оба указанных состояния.

Reply

balmaster September 6 2009, 08:01:33 UTC
вы правы, судя по всему таймаут у потока закончился и данный поток не получил монитор.

смущает то, что по callstack все потоки ожидают получения блокировки на 0x00007f6ccdc374c0, и ни один из потоков не владеет монитором и ни для одного потока блокировка на 0x00007f6ccdc374c0 не взята.

есть идеи почему так может быть?
пс. callstack я смотрел внимательно.
если интересно могу привести полный листинг

Reply

sassa_nf September 11 2009, 11:28:44 UTC
1. хоцца разобраться с меткой "BLOCKED" или есть улики, что тут собака умерщвлена?
2. а че - давайте полный листинг с native threads
3. а че в jconsole показывают?

Reply

balmaster September 17 2009, 05:29:27 UTC
здесь все коллстеки
http://ifolder.ru/14043242

Reply

balmaster September 17 2009, 05:30:01 UTC
нативных коллстеков в тот раз не снимали

Reply


Leave a comment

Up