File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Threads and Synchronization and the fly likes Sychronized behaviour Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Threads and Synchronization
Bookmark "Sychronized behaviour" Watch "Sychronized behaviour" New topic

Sychronized behaviour

Atul Prabhu
Ranch Hand

Joined: Dec 17, 2002
Posts: 60

In this case if I create two instances of ThreadTest and call the method start().

The output of this code was :

My question is if the first thread calls goToWait() method then it goes to wait state i.e call to wait method does not return.

As the method is synchronised it allows only one thread to call goToWait() method. So concept wise when the first thread is in the wait mode at(// 1) then it should not allow any other thread to enter goToWait() method.

But in this case we see both the threads are in wait state. I think only one thread should be in wait state.

Could any one explain why such behaviour.

Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24199

The wait() method releases the lock before going into the "wait state," so that in fact it is entirely possible for two methods to be waiting at the same time. If wait() didn't release the lock, then only one thread could ever be waiting for a given monitor, right?

wait() won't return without re-acquiring the same lock.
[ February 01, 2005: Message edited by: Ernest Friedman-Hill ]

[Jess in Action][AskingGoodQuestions]
Atul Prabhu
Ranch Hand

Joined: Dec 17, 2002
Posts: 60
Thanks Ernest Friedman-Hill

Now the things are clear.
[ February 01, 2005: Message edited by: Atul Prabhu ]
I agree. Here's the link:
subject: Sychronized behaviour
It's not a secret anymore!