public class Test1 { public synchronized void f(){ //方法体 }}public void f(){ synchronized(this){ //方法体 } }package com.litl.java.test;import java.util.concurrent.TimeUnit;public class Test1 { public synchronized static void f(){ System.out.println("f-start---------------"); try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("f_end>>>>>>>>>>>>>>>>"); } public synchronized void g() { System.out.println("g-start-----------"); try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("g_end>>>>>>>>>>>>>"); } public static void main(String[] args) { for(int i=0;i<10;i++){ final Test1 t=new Test1(); new Thread(new Runnable() { @Override public void run() { t.f(); t.g(); } }).start(); } }}public void g() { synchronized(Test1.class){ System.out.println("g-start-----------"); try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("g_end>>>>>>>>>>>>>"); }}
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
f-start---------------
f_end>>>>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>
g-start-----------
g_end>>>>>>>>>>>>>