您的位置:首页 > 编程语言 > Java开发

java多线程学习笔记:使用Callable和Future

2016-04-02 10:07 609 查看
Callable 和 Runable接口相似, 但是实现了Runable接口的线程运行结束后无法返回值, 而Callable 可以返回值,由Future 可以拿到返回值,通过下面的例子可以展示Callable和 Future的使用场景:

public class CallableAndFuture {
public static void main(String[] args) {
Callable<Integer> callable = new Callable<Integer>() {
public Integer call() throws Exception {
return new Random().nextInt(100);
}
};
FutureTask<Integer> future = new FutureTask<Integer>(callable);
new Thread(future).start();
try {
Thread.sleep(5000);// 可能做一些事情
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}


FutureTask 实现了Future 和 Runnable接口,因此实例化后可以用来构造线程,通过Future的get()方法可以拿到线程运行后返回的值。也可以结合线程池使用。

public class CallableAndFuture {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<Integer> future = threadPool.submit(new Callable<Integer>() {  //submit 返回一个实现了Future接口的对象
public Integer call() throws Exception {
return new Random().nextInt(100);
}
});
try {
Thread.sleep(5000);// 可能做一些事情
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}


学习来源:/article/1391640.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: