class A implements Runnable {
static int b = 10;
public void run() {
m1();
}
public synchronized void m1() {
b = 100;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(b);
}
public synchronized void m2() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
b = 200;
System.out.println(b + "m2");
}
public static void main(String[] args) {
A aa = new A();
Thread tt = new Thread(aa);
tt.start();
aa.m2();
}
}
答案 0 :(得分:0)
因为当你在做.start()时,线程将被安排执行。虽然对aa.m2()的调用正在执行,并且会更快(大多数时候)。
答案 1 :(得分:0)
在aa.m2
中,主线程将直接调用m2
方法,因此它将是第一个被执行的方法,因为thead tt
只需要很少的时间来初始化和启动。 m2
方法已同步,因此它将获取对象aa
的锁定,然后当线程tt
完成初始化时,它将调用m1
方法并等待锁定要释放的对象aa
(m1
方法也已同步)。