File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

notify() question from Nikos

 
Nidhi Sar
Ranch Hand
Posts: 252
Android Eclipse IDE Ubuntu
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,

This is a question from Niko's on Threads. What is the result of the following code:


The possible choices are:
a. It prints 0.
b. It prints 999999.
c. The output is not guaranteed to be any of the above.

The answer is choice b.

But b is guaranteed only if line 1 executes before line 2 and the main thread gets the lock on thread object BEFORE the second thread. That cannot be guaranteed. If the reverse happens & line 2 executes first, the program will basically hang at thread.wait() [since notify() has already happened, and wait() doesn't know that].

So shouldn't the answer be choice c?
 
Ankit Garg
Sheriff
Posts: 9497
22
Android Google Web Toolkit Hibernate IntelliJ IDE Java Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Seems a valid reason to me. To get a guaranteed behavior, the thread.start() statement should be inside the synchronized block in main method...
 
Venu Chakravorty
Ranch Hand
Posts: 46
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Taken from K & B (SCJP 1.6) page no.: 748 and 749:

This program contains two objects with threads: ThreadA contains the main
thread and ThreadB has a thread that calculates the sum of all numbers from 0
through 99. As soon as line 4 calls the start() method, ThreadA will continue
with the next line of code in its own class, which means it could get to line 11
before ThreadB has finished the calculation. To prevent this, we use the wait()
method in line 9.

Even it is stated that "As soon as line 4 calls the start() method, ThreadA will continue with the next line of code in its own class...". What I do not understand is, how can we be so sure?
 
I agree. Here's the link: http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic