本帖最后由 邱成 于 2012-9-15 07:09 编辑
public class TT implements Runnable {
int b = 100;
public synchronized void m1() throws Exception{
b = 1000;
Thread.sleep(1000);
System.out.println("b = " + b);
}
public void m2() {
System.out.println(b);
}
public void run() {
try {
m1();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
Thread.sleep(100);
tt.m2();
}
}
运行结果为
1000
b=1000
我的问题是: 如果要在m2的方法上加synchronized
也就是变为public synchronized void m2() throws Exception{
.....
}
为什么输出结果就变了,输出结果为:
b=1000
1000
另外问一下:
java 中,synchronized 修饰不同方法有何区别?
synchronized {修饰代码块}
synchronized {static方法}
synchronized {run方法}
synchronized {普通方法}
有什么区别? |