首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-01-02 
synchronized锁定变量吗Java codepublic class TT implements Runnable {private int b 100public void

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);
}

热点排行