同步块与同步方法区别示例
代码示例:
public class SyncTest{ static Object obj = new Object(); public static void main(String[] args) { T1 t1 = new T1(); T2 t2 = new T2(); t1.start(); t2.start(); } public static void test1() { synchronized(obj) { try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.err.println("===="); System.err.println("test1"); } } public static synchronized void test2() { System.err.println("****"); System.err.println("test2"); }}class T1 extends Thread{ public void run() { SyncTest.test1(); }}class T2 extends Thread{ public void run() { SyncTest.test2(); }}运行结果:
****
test2
等待5秒
====
test1
当使用同步方法时
public static synchronized void test1() { try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.err.println("===="); System.err.println("test1"); }运行结果:
等待5秒
====
test1
****
test2
结论:
同步方法将当前对象做为同步锁,同步锁生效后该对象内所有的同步方法都不可被调用。