public class myThread extends Thread {
public void run() {
synchronized(System.out){
for (int i = 0; i < 10; i++) {
try{
sleep(100);
}catch(InterruptedException e){e.printStackTrace();}
System.out.println(getName() + ": i=" + i);
if (i==9) System.out.println("=========");
}
}
}
public static void main(String[] a) {
myThread thread1 = new myThread();
myThread thread2 = new myThread();
thread1.setName("A");thread1.start();
thread2.setName("B");thread2.start();
}
}
在这个测试中,由于执行所需时间片太短,如果不在其中加一句sleep(100)的话,线程A 和线程B的交叉就体现不出来,就更不用说验证synchronized的作用了; 另,注意synchronized所同步的对象是System.out, 而不是this.