from k&b, Given:
public class Letters extends
Thread {
private
String name;
public Letters(String name) {
this.name = name;
}
public void write () {
System.out.print(name);
System.out.print(name);
}
public static void main(String[] args) {
new Letters("X").start();
new Letters("Y").start();
}
}
We want to guarantee that the output can be either XXYY or YYXX, but never XYXY or any other combination. Which of the following method definitions could be added to the Letters class to make this guarantee? (Choose all that apply.)
public void run() { write(); }
public synchronized void run() { write(); }
public static synchronized void run() { write(); }
public void run() { synchronized(this) { write(); } }
public void run() { synchronized(Letters.class) { write(); } }
public void run () { synchronized (System.out) { write (); } }
public void run() { synchronized(System.out.class) { write(); } }
Ans is:
public void run() { synchronized(Letters.class) { write(); } }
public void run () { synchronized (System.out) { write (); } }
I would like to know why answer cannot include
public static synchronized void run() { write(); }
public void run() { synchronized(this) { write(); } }
I guess, public static synchronized void run() is not correct as we do not have static variable in the class, not sure though.
Any explanation appreciated.