说到线程,大家都会想到同步问题。说到同步,就会想到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