public class MyThread2 extends Thread{
private int i = 5;
@Override
public void run() {
super.run();
System.out.println("i=" + (i--) + " threadName=" + Thread.currentThread().getName());
}
}
public class MyThreadRun {
public static void main(String[] args) {
MyThread2 run = new MyThread2();
Thread t1 = new Thread(run);
Thread t2 = new Thread(run);
Thread t3 = new Thread(run);
Thread t4 = new Thread(run);
Thread t5 = new Thread(run);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
結果
程式運作後,還是由機率會出現線程不安全的情況。
原因: 雖然println()方法在内部是同步的,但i–操作卻是在進入println()之前發生的.