说到线程,大家都会想到同步问题。说到同步,就会想到Synchronized。

接下来,我跟大家分享一下我个人对Synchronized的用法理解。


先看看下面一个例子(在不用Synchronized之前) 输出0到5 三次

public class TestThread {

    public static void main(String args[]) {
        for(int i=0;i<3;i++){
         new    MyThread1().start();
    }
    }
}

class MyThread1 extends Thread {

    public  void run() {
            Param.instance().num();
    }
}


class Param {
    
    private static Param instance;
    public static Param instance() {
        if(instance==null){
            instance= new Param();
        }
        return instance;
    }
    
    public  void num() {
        for(int i=0;i<6;i++){
            System.out.print(i);
        }
        System.out.println();
    }


}


输出结果

000112132425
345
345


由此看出线程是交错运行的,结果导致输出错乱。这并不是我们要的结果。


我们试着在方法上 加上 Synchronized 以让其正常有序的打印


结果很出呼意料


00011122345
2345
345