在这里,我创建了Main类,在其中创建了一个线程t1,它通过向它发送一个可运行的目标开始。但是由于线程已经启动,我相信run()方法应该运行并调用a.SetI(20)方法。但输出结果为0.可能是somone请让我知道这背后的逻辑。
public class _216 {
private int i;
public synchronized void setI(int i){
this.i=i;
}
public synchronized int getI(){
return i;
}
}
class Main{
public static void main(String[] args) {
final _216 a=new _216();
Runnable r=new Runnable(){
@Override
public void run() {
a.setI(20);
}
};
Thread t1=new Thread(r);
t1.start();
System.out.println(a.getI());
}
}
答案 0 :(得分:2)
这背后的逻辑'是你打印时线程可能还没有执行。
答案 1 :(得分:1)
您应该使用t1.join(),以便主要和新的线程都将连接,以后的代码将继续打印。
下面
Thread t1=new Thread(r);
t1.start();
t1.join()
System.out.println(a.getI());
答案 2 :(得分:1)
你很可能在线程完成运行之前打印结果。
此时线程可能同时运行。
同时认识到在调用setI之前我从未初始化,考虑硬编码默认值。