This week's book giveaway is in the Clojure forum.
We're giving away four copies of Clojure in Action and have Amit Rathore and Francis Avila on-line!
See this thread for details.
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Valentin's Question 52

 
Mike Gershman
Ranch Hand
Posts: 1272
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
While I agree with the results, I don't agree with the explanation of question 52.

This scenario doesn't happen:
Imagine the following scenario: t1 starts, it invokes aMethod. i is now 1. t1 releases the lock associated with a and the scheduler decides that it is the turn of t2 to run. t2 invokes aMethod and i's value is now 2.


The code actually creates two Question52 objects, each with its own A object.

The instance methods aMethod() and bMethod() synchronize on the current instance of A. Since ++ and -- are not thread-safe, threads t1 and t2 could easily corrupt static variable i during their combined 20,000,000 executions.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic