/* 文件名TT2.java
*
* 最后一条语句输出的b的值是1000还是2000?
*/
public class TT2 implements Runnable{
int b = 0;
public synchronized void m1() throws Exception{
b = 1000;
Thread.sleep(5000);
System.out.println("b_m1 = "+b);
}
public synchronized void m2()throws Exception{
b = 2000;
Thread.sleep(6000);
//System.out.println("b_m2 = "+b); //加上这条输出语句 结果为:b = 2000,
//不加b = 1000
}
public void run(){
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
TT2 tt = new TT2();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println("b = "+tt.b);
}
}
1000 和 2000 都有可能,其结果依赖于 m1 和 m2 谁先获得锁。
synchronized方法等同于
synchronized(this){
//代码块
}
锁在对象实例上,你的这个例子要看到底如何执行可以吧 两个sleep的值设的相差大点,就可以看到效果