synchronized 加到 static 方法前面是給class 加鎖,即類鎖;而synchronized 加到非靜態方法前面是給對象上鎖。
對象鎖和類鎖是不同的鎖,所以多個線程同時執行這2個不同鎖的方法時,是異步的。
類鎖對該類的所有對象都能起作用,而對象鎖不能。
大白話就是:一個線程執行同步的靜態方法后,另一個線程就得等第一個線程執行完這個方法后才能繼續執行。但是第二個線程可以異步地去執行非靜態方法。