Re: Issues using "synchronized".
frick.jeremiah@gmail.com wrote:
....
I actually just noticed that the problem isn't that the code is never
getting to the notify (called as a result of the begin() function),
it's because it hits the notify before it hits the wait() in the main
section. What I don't understand now is why the added delay within the
main function (provided by the loop which obviously has a couple extra
zeros, since I didn't have the code right in front of me I just threw
that in quickly, the point of it should have been pretty clear) is
changing the order of execution to the point that if the delay is
there, I hit the wait() first, then the notify(). If the delay isn't
there, I hit the notify() before the wait(), which causes me to sit
waiting for a notify that has already happened.
Jeremy
There is one important element that I see neither in your code nor in
your comments, a continuation condition.
Threads don't wait just for fun. They wait because some condition they
need to continue operating is untrue. A consumer of data sees an empty
buffer, and cannot continue until there is data in the buffer. A
producer of data sees a full buffer, and cannot go on until there is
room to store its data item.
In the real code, is the waiting thread checking for some condition,
inside the synchronized block but before calling wait? Is the notifier
setting the condition, in its synchronized block but before calling notify?
If this does not help, I suggest trying to produce a short,
self-contained, compilable example, see
http://mindprod.com/jgloss/sscce.html
You can do it either by stripping down your real code, removing
everything irrelevant to the problem, or by writing a small example from
scratch.
Patricia