(Untitled)

Sep 24, 2009 20:01

Под катом программа на Яве. multithreading.
volatile там нафиг не нужен, лень убирать.
Кто может объяснить, почему она работает именно так, как работает?
В спеке и жавадоке не нашел.
Read more... )

Leave a comment

Comments 3

(The comment has been removed)

ssrez September 29 2009, 11:31:56 UTC
Ну раз совсем никто в теме не оказался, поясню.
Тут суть проблемы, что 2 синхронайзед метода в 2х потоках не могут бежать одновременно. При этом 1 из них де факто пускает 2й, не останавливая себя. И надо как-то решать это противоречие.

Нигде в документации не нашел такого, но на самом деле она печаете в порядке 324.

Reply

amoshche December 14 2009, 23:27:02 UTC
эге-ге. реальность такова...
http://java.sun.com/docs/books/jls/third_edition/html/memory.html

17.8.3 Interruptions

Interruption actions occur upon invocation of method Thread.interrupt, as well as methods defined to invoke it in turn, such as ThreadGroup.interrupt. Let t be the thread invoking u.interrupt, for some thread u, where t and u may be the same. This action causes u's interruption status to be set to true.
Additionally, if there exists some object m whose wait set contains u, u is removed from m's wait set. This enables u to resume in a wait action, in which case this wait will, after re-locking m's monitor, throw InterruptedException.Invocations of Thread.isInterrupted can determine a thread's interruption status. The static method Thread.interrupted may be invoked by a thread to observe and clear its own interruption status ( ... )

Reply

ssrez December 15 2009, 12:31:53 UTC
Ага, мерси. По первой цитате кста камент, который тоже чего-то часто игнорируют, если вылетел эксепшен, то флаг interrupted не взводится. Тоже небось есть в JLS где-нить по этому поводу фраза, но тоже ее еще не нашел.

И ваще ты крут, я вторую болдовую фразу асилил с 20й попытки гдето, после того как нарисовал и то, пришлось додумать, что авторы имели ввиду. Найти ее в JLS так просто, ты крут.

По сути получается notify всегда переводит какойто другой поток из состояния ожидающего в состояние заблокированного, не более. А когда мы освобождаем наш монитор, он уже на общих основаниях пытается продолжится.

Reply


Leave a comment

Up