天天看點

留意i--和System.out.println()的非線程安全問題

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();
    }
}
           

結果

留意i--和System.out.println()的非線程安全問題

程式運作後,還是由機率會出現線程不安全的情況。

原因: 雖然println()方法在内部是同步的,但i–操作卻是在進入println()之前發生的.
留意i--和System.out.println()的非線程安全問題