nik*_*983 45 java multithreading
假设我们有这个简单的例子:
public Example extends Thread{
String temp;
public Example(){
}
@Override
public void run(){
.
.
.
.
temp = "a_value";
}
public static void main(String[] args) {
Example th = new Example();
th.start();
}
}
Run Code Online (Sandbox Code Playgroud)
Thread完成工作后怎么能给我返回String temp?
Tof*_*eer 65
使用(相对)new Callable<T>
而不是Runnable(1.5及更新版本):
这是一个(简单)示例:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main {
public static void main(final String[] argv) {
final ExecutorService service;
final Future<String> task;
service = Executors.newFixedThreadPool(1);
task = service.submit(new Foo());
try {
final String str;
// waits the 10 seconds for the Callable.call to finish.
str = task.get(); // this raises ExecutionException if thread dies
System.out.println(str);
} catch(final InterruptedException ex) {
ex.printStackTrace();
} catch(final ExecutionException ex) {
ex.printStackTrace();
}
service.shutdownNow();
}
}
class Foo implements Callable<String> {
public String call() {
try {
// sleep for 10 seconds
Thread.sleep(10 * 1000);
} catch(final InterruptedException ex) {
ex.printStackTrace();
}
return ("Hello, World!");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过Observer模式实现此目的.在完成线程时通知所有听众它已完成并且他们可以检索值(通过getter).或者它甚至可以发送计算值.
或者您可以使用任务,请参阅FutureTask,一个可运行的(实际上如下所述的Callable),它返回一个结果并可以抛出异常.
归档时间: |
|
查看次数: |
65657 次 |
最近记录: |