我有一个疑问。如果我们谈论Java多线程,排除并发框架,那么我们如何从run()方法返回一个值。
我在一些采访中被问到这个问题并被问到如何在不使用可调用或并发框架的情况下执行此操作,即如何告诉主线程Thread1已完成某些执行(run()已完成)并且您可以更新UI。 / p>
编辑:这与标记为重复的问题不同,当前的问题询问您将如何使用runnable设计/编码以返回值。根据run()函数这是不可能的,但问的是如何通过runnable代码实现这种行为,以便可以通知/更新主线程?
我想这些是不同的问题。如果我错了,请纠正我。
答案 0 :(得分:0)
一种方法是在线程中设置一个值,等待线程结束,然后获取值。这是一个简单的,不是很好的编码示例,但您可以执行它。请注意使用相同对象(synchronized
)的thread
块。
public class Test {
private int result;
public static void main( String[] args) throws InterruptedException {
new Test().runTest();
}
private void runTest() throws InterruptedException {
Thread thread = new Thread() {
public void run() {
System.out.println("Thread starts");
try {
// some long operation in your thread
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ends");
// set the value you want to "produce" with your thread
setResult(42);
// notify waiting threads
synchronized (this) {
notify();
}
}
};
// start your thread
thread.start();
// wait for it
synchronized (thread) {
thread.wait();
}
// now you got your result
System.out.println("result = " + result);
}
void setResult(int value) {
this.result = value;
}
}