当前位置: 代码迷 >> J2SE >> synchronized锁定变量吗,该如何处理
  详细解决方案

synchronized锁定变量吗,该如何处理

热度:70   发布时间:2016-04-24 12:23:26.0
synchronized锁定变量吗
Java code
public class TT implements Runnable {    private int b = 100;    public void m1() {        synchronized (this) {            try {                Thread.sleep(3000);                b = 1000;            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println("b1 = " + b);        }    }    public void m2() {        System.out.println("b2 = " + b);    }    public void run() {        this.m1();    }    public static void main  (String[] args) throws Exception {        TT t = new TT();        Thread t1 = new Thread(t);        t1.start();        Thread.sleep(500);        t.m2();    }}


输出
b2 = 100
b1 = 1000

如果把最后那个Thread.sleep(500)改成5000
那输出
b2 = 1000
b1 = 1000

请问下为什么输出不同。m1方法执行过程中
为什么m2方法可以调用b变量啊。
我自己理解。 synchronized锁定后。其中的代码都锁定了。
谢谢

------解决方案--------------------
因为m2()方法没有同步,只有同步代码块之间存在互斥,同步的和非同步的之间不互斥
public synchronized void m2() {//把m2也同步了
System.out.println("b2 = " + b);
}
  相关解决方案