Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

One more on threads

 
Deepali Pate
Ranch Hand
Posts: 114
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
class Counter {
int v = 0;
synchronized void inc() { v++; }
synchronized void dec() { v--; }
}
public class Q7ed5 {
Counter i;
Counter j;
Counter k;
public synchronized void a() {
i.inc();
System.out.println("a");
i.dec();
}
public synchronized void b() {
i.inc(); j.inc(); k.inc();
System.out.println("b");
i.dec(); j.dec(); k.dec();
}
public void c() {
k.inc();
System.out.println("c");
k.dec();
}
}

i.v gurtaneed to be 0 or 1
j.v guranteed to be 0 or 1
k.v guranteed to be 0 or 1
j.v greater than or = to k.v at any given time
k.v greater than or = to j.v at any given time
No answer provided please help.
 
Amir Ghahrai
Ranch Hand
Posts: 110
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
(a) and (b)
Here is the explanation from the book
if a thread is executing method b() on an object, then it is guaranteed that no other thread executes methods a() and b() concurrently. therefore, the invocation counters i and j will never show more than one concurrent invocation. two threads can concurrently be executing methods b() and c(). therefore the invocation counter k can easily show more than one concurrent invocation. that's all!
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic