【发布时间】:2012-12-26 12:52:13
【问题描述】:
不确定我是否正确理解线程,有人可以告诉我在以下示例中我是对还是错:
class Task {
String taskName;
private Thread thread;
boolean isFinished;
public Task(String name){
taskName = name;
}
public void createTask(final Runnable r) {
thread = new Thread(r){
public void run(){
if(r != null) {
r.run();
isFinished = true;
}
}
};
thread.start();
}
}
我在我的应用程序中实际做的是我将isFinished 设置为true,并有一个观察者,只要isFinished 为真,就会做一些事情。恐怕isFinished 设置为true,在我作为参数传递的Runnable 中的所有代码实际终止之前。
run 方法不是假设将我传递的代码放在单独的线程中并异步运行该代码吗?
【问题讨论】:
-
听起来你想阻止直到
Runnable完成。这就是join()的用途。 -
鉴于答案无处不在,如果您向我们提供更多信息会有所帮助。你期待什么行为?您实际观察到的行为是什么?
-
@unholysampler 我应该把连接放在哪里?
-
dalvarezmartinez1: unholysampler 意味着您在启动的线程对象上调用 join,然后您的当前线程应该阻塞,直到启动的线程完成。但是,这不是 100% 可靠的,因为您不知道 join 是否成功完成。 FutureTask 更好:)
标签: java concurrency