在线程中调用run方法

时间:2014-10-08 03:08:52

标签: java

在这里,我创建了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());
    }
}

3 个答案:

答案 0 :(得分:2)

这背后的逻辑'是你打印时线程可能还没有执行。

答案 1 :(得分:1)

您应该使用t1.join(),以便主要和新的线程都将连接,以后的代码将继续打印。

下面

Thread t1=new Thread(r);
t1.start();
t1.join()

    System.out.println(a.getI());

答案 2 :(得分:1)

你很可能在线程完成运行之前打印结果。

此时线程可能同时运行。

同时认识到在调用setI之前我从未初始化,考虑硬编码默认值。