This is a question from Mughal Khalid's mock
scjp test applet:
Given the following code, which statements concerning the objects referenced through the member variables i, j and k are true, given that any
thread may call the methods a(), b() and c() at any time?
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();
}
}
Options as answers were
1)i.v is guaranteed to be 0 or 1.
2)j.v is guaranteed to be 0 or 1.
3)k.v is guaranteed 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.
Answer given was 1 and 2.
I could not figure out how would k.v not be 0 or 1.And is it possible to figure out options 4 and 5.
Please help.