public class TestSync3 implements Runnable { private int b = 100;
private synchronized void m1() throws InterruptedException { b = 2000;// Thread.sleep(500); System.out.println(“m1:” + b); }
private void m2() { System.out.println("m2:" + b); } public static void main(String[] args) throws InterruptedException { TestSync3 tt = new TestSync3(); Thread t = new Thread(tt); t.start();// Thread.sleep(100); tt.m2(); }
@Override public void run() { try { m1(); } catch (InterruptedException e) { e.printStackTrace(); } }}
结果是: m2:100 m1:2000 解析: 在两个线程都不“睡眠”(不加sleep)时,加了同步锁(synchronized )的m1方法总是比m2慢,所以m2先于m1得出结果。 因为m1方法加了同步锁,会导致效率低,所以运行起来m1一定在m2后面执行。
