Java 为什么结果是200,然后是100?
因为在执行.start()时,线程将被安排执行。当对aa.m2()的调用正在执行时,速度会快得多(大多数情况下)。在Java 为什么结果是200,然后是100?,java,Java,因为在执行.start()时,线程将被安排执行。当对aa.m2()的调用正在执行时,速度会快得多(大多数情况下)。在aa.m2中,主线程将直接调用m2方法,因此它将是第一个被执行的方法,因为theadtt初始化和启动所需的时间很少m2方法是同步的,因此它将获取对象的锁aa,然后当线程tt完成初始化时,它将调用m1方法,并等待对象aa的锁被释放(m1方法也是同步的).为什么你认为它应该是100加200(虽然有时可能是这样)?这个问题获得了赞成票,这让我很沮丧。非常感谢。我总是混淆线程,这真的很难理
aa.m2
中,主线程将直接调用m2
方法,因此它将是第一个被执行的方法,因为theadtt
初始化和启动所需的时间很少m2
方法是同步的,因此它将获取对象的锁aa
,然后当线程tt
完成初始化时,它将调用m1
方法,并等待对象aa
的锁被释放(m1
方法也是同步的).为什么你认为它应该是100加200(虽然有时可能是这样)?这个问题获得了赞成票,这让我很沮丧。非常感谢。我总是混淆线程,这真的很难理解。
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();
}
}