File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes synchronized methods + Threads Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "synchronized methods + Threads" Watch "synchronized methods + Threads" New topic
Author

synchronized methods + Threads

Parameswaran Thangavel
Ranch Hand

Joined: Mar 01, 2005
Posts: 485



1. i.v guaranteed always to be 0 or 1
2. j.v guaranteed always to be 0 or 1
3. k.v guaranteed always to be 0 or 1
4. j.v will always be greater than or equal to k.v at any given time.
5. k.v will always be greater than or equal to j.v at any given time.
Animesh Shrivastava
Ranch Hand

Joined: Jul 19, 2004
Posts: 298
I guess the answer should be both 1 and 2.
Whats the correct answer?
Parameswaran Thangavel
Ranch Hand

Joined: Mar 01, 2005
Posts: 485
hi
can any please explain me
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18896
    
  40

Originally posted by Parameswaran Thangavel:
hi
can any please explain me


Let's look at the possible answers...

1. i.v guaranteed always to be 0 or 1
2. j.v guaranteed always to be 0 or 1
3. k.v guaranteed always to be 0 or 1
4. j.v will always be greater than or equal to k.v at any given time.
5. k.v will always be greater than or equal to j.v at any given time.

As for the methods, a() and b() are both synchronized. They can't be ran in parallel via different threads. The c() method is not synchronized, it can be ran in parallel, even while a() or b() is running.

(3) is not true as you can have two c() method running in parallel, and having increment the count before decrementing the count -- producing a value of 2. (albeit very short lived)

(4) is not true as a ramification of (3). K can have large values... In theory, hard to produce in practice.

(5) is not true based on how method b() works. It increments j before incrementing k... hence, j is larger than k for the really small period between the two methods.

Now that leaves (1) and (2) which is only modified from a() and b(), and which can only run via a single thread, and always runs in pairs, inc() followed by a dec().

Henry


Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: synchronized methods + Threads