我在A类中有一个方法,它创建一个线程并在类B中调用run方法。我在类B中有一个列表,它在类B的run方法中更新,我需要在类A中访问它run方法返回。我在下面给出了示例代码。
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类中的列表值l = obj.getList();
时,我将变为null。类A中的行l = obj.getList();
会在run方法更新之前立即被调用。如何使主线程等待并在线程T返回后显示正确的值。请建议吗?
答案 0 :(得分:7)
虽然其他建议也可能有用。最简单的解决方案是等待线程结束。
T.start();
T.join();
l = obj.getList();
答案 1 :(得分:1)
在这种特殊情况下,我认为没有理由在第一时间产生线程。
而不是
B obj = new B();
Thread T = new Thread(obj);
T.start();
你可以这样做:
new B().run();
当您在开始和加入之间执行某些操作时,使用join更有用。
T.start();
//do some other work here
T.join();