直接看代码
public class SynTest { static int count = 0; private int i; public SynTest() { i = (++count); } public synchronized void f(){ System.out.println("hello" + " " + i); while (true) { } } public static void main(String[] args) { SynTest synTest = new SynTest(); SynTest synTest1 = new SynTest(); Thread thread = new Thread() { @Override public void run() { synTest.f(); } }; Thread thread1 = new Thread() { @Override public void run() { synTest1.f(); } }; thread.start(); thread1.start(); } } /** hello 1 hello 2 */再来看这一个
public class SynTest { static int count = 0; private int i; public SynTest() { i = (++count); } public synchronized void f(){ System.out.println("hello" + " " + i); while (true) { } } public static void main(String[] args) { SynTest synTest = new SynTest(); Thread thread = new Thread() { @Override public void run() { synTest.f(); } }; Thread thread1 = new Thread() { @Override public void run() { synTest.f(); } }; thread.start(); thread1.start(); } } /** hello 1 */对实例对象加锁
再来看代码
public class SynTest { public static synchronized void f(){ System.out.println("hello"); while (true) { } } public static void main(String[] args) { SynTest synTest = new SynTest(); SynTest synTest1 = new SynTest(); Thread thread = new Thread() { @Override public void run() { synTest.f(); } }; Thread thread1 = new Thread() { @Override public void run() { synTest1.f(); } }; thread.start(); thread1.start(); } } /** hello */对class对象加锁
然后synchronized代码块肯定是对显式的对象加锁