*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Question on Threads Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Question on Threads" Watch "Question on Threads" New topic
Author

Question on Threads

Arjun Reddy
Ranch Hand

Joined: Nov 10, 2007
Posts: 627
Hi All,

I am basically creating two threads and giving both the threads, the same job. Now in the run method, I am checking the thread name and joining it to another thread. But I am getting errors. Can someone tell me why? Also, since I am using a synchronized block in the run method and since join keeps the lock, I believe even if I succeed with the compilation process, it will cause a deadlock. Because say if thread t1 entered the run method and I do, t2.join, then t1 is waiting for t2 to complete but has the lock and t2 is waiting for the lock. Am I correct? I am providing the code.



1). Why won't the above code compile?
2). Am I correct that if the code would have compiled, it would lead to a deadlock?
3). How can I call join on t1 from t2 or join on t2 from t1 without causing a deadlock in the above situation?

Thanks.
[ September 15, 2008: Message edited by: Arjun Reddy ]

Be Humble... Be Nice.
Jamie MacDonald
Greenhorn

Joined: May 17, 2008
Posts: 20
Your code won't compile because Thread1 and Thread2 in your run() method have not been declared. The following code will compile (and that's about all it's good for):



As you noted, once one of the Threads attempts to join with the other, you will wait forever. You don't actually even need the synchronized block to create the deadlock condition--if you remove it, then each Thread will get to the join statement and then wait forever for the other Thread to complete.

I'm not clear what the goal of your code is once it actually does something, but join() is typically used when you want a Thread to complete before something else happens. So you would put the join outside the run method:



If you want two run() methods to be cooperating (for instance a Thread that gets user input and a Thread that processes it), you should use wait() and notify() to allow one to wait on the other while both are still active.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Question on Threads
 
Similar Threads
Thread synchronization
synchronized threads
A few questions on wait(), sleep(int) and InterruptedException
locking??
about threads, using locks of the objects in synchronized blocks