0

我在 A 类中有一个方法,它创建一个线程并调用 B 类中的 run 方法。我在 B 类中有一个列表,该列表在 B 类的 run 方法中更新,我需要在 run 方法返回后在 A 类中访问它. 我在下面给出了示例代码。

class A {
    public static void main(String[] args) {

        List l = null;

        B obj = new B();
        Thread T = new Thread(obj);
        T.start();

        l = obj.getList();
        // do something with l    
    }
}

class B implements Runnable {

    List l;

    void run() {
        l = doSomething();    
    }

    public List getList() {
        return List l;
    }
}

现在,当我获得 A 类中的列表值时,我得到了 null。Al = obj.getList();类中的行在l = obj.getList();被 run 方法更新之前立即被调用。线程T返回后如何让主线程等待并显示正确的值。请建议?

4

2 回答 2

7

尽管其他建议也可能有用。最简单的解决方案是等待线程结束。

T.start();
T.join();

l = obj.getList();
于 2013-10-03T19:53:19.110 回答
1

在这种特殊情况下,我认为没有理由一开始就产生线程。

代替

B obj = new B();
Thread T = new Thread(obj);
T.start();

你可以这样做:

new B().run();

当您在 start 和 join 之间执行某些操作时,使用 join 会更有用。

T.start();
//do some other work here
T.join();
于 2013-10-03T20:01:57.617 回答