class Callme {
void call(String msg) {
System.out.print("[" + msg);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println("]");
}
}
class Caller implements Runnable {
String msg;
Callme target;
Thread t;
public Caller(Callme targ, String s) {
target = targ;
msg = s;
t = new Thread(this);
t.start();
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
System.out.println("rahul");
}
// synchronize calls to call()
public void run() {
synchronized(target) { // synchronized block
target.call(msg);
}
}
}
class Synch {
public static void main(String args[]) {
Callme target = new Callme();
Caller ob1 = new Caller(target, "Hello");
Caller ob2 = new Caller(target, "Synchronized");
Caller ob3 = new Caller(target, "World");
// wait for threads to end
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
} catch(InterruptedException e) {
System.out.println("Interrupted");
}
}
}
このプログラムでは、System.out.print("rahul") なしで同期ブロックを使用すると、完全な出力が出力されますが、SOP("rahul") のこれらの不要なステートメントを配置すると、出力が歪むのはなぜですか?