代码如下:- 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 synchronized void m2() throws Exception {
- Thread.sleep(3000);
- b = 2000;
- }
-
- 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();
- tt.m2();
- Thread.sleep(5000);
- System.out.println(tt.b);
- }
- }
复制代码 结果如下:
b =10001000
我是这样分析的: t线程开始, 调用run(), run()里面调用m1()方法, m1方法被锁定, b赋值为1000, 然后睡眠1000毫秒
打印b = 1000 , 接着调用m2(), m2()方法被锁定,因为只有m1()执行完才能执行m2(), 刚才m1()执行完了, m2睡眠3000毫秒,
然后b赋值为2000, 主线程睡眠5000毫秒, 然后输出tt.b为2000 , 但是结果为什么是1000呢 ? 不是在m2()里面b被赋值为2000了吗?
|