Callable实现多线程
下文笔者讲述Callable实现多线程的方法及示例分享,如下所示
Callable简介
Callable是 Java 中的一个接口 它定义了一个带有返回值的任务 与Runnable接口不同,Callable接口可以返回一个结果 它有一个单独的方法call(),用于执行任务并返回结果, call()方法的返回类型由泛型参数指定 在 Java 1.5版本中 就提供Callable和Future 通过它们可以在任务执行完毕之后得到任务执行结果 Callable接口使用泛型去定义它的返回类型 Executors类提供了一些有用的方法在线程池中执行Callable内的任务 由于Callable任务是并行的,必须等待它返回的结果 java.util.concurrent.Future对象为这个问题提供了解决方案 在线程池提交Callable任务后返回了一个Future对象 使用它可以知道Callable任务的状态和得到Callable返回的执行结果 Future提供了get()方法让用户可以等待Callable结束并获取它的执行结果例:
package com.java265.thread;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class TestMyCallable {
public static void main(String[] args) throws InterruptedException, ExecutionException {
/*构造方法摘要
FutureTask(Callable<V> callable):
创建一个 FutureTask,一旦运行就执行给定的 Callable。
*/
FutureTask task = new FutureTask(new MyCallable());
/*
* class FutureTask implements RunnableFuture
* interface RunnableFuture extends Runnable,Future
* 说明:FutureTask也是Runnable的子类
*/
//这里的task可以当作Runnable对象
new Thread(task).start();//启动线程
System.out.println(task.get());//返回结果
}
}
/*------------------------自定义类MyCallable---------------------------*/
package com.thread;
import java.util.concurrent.Callable;
/*
* 自定义类实现Callable接口
* Runnable和Callable的区别:
* Runnable执行完线程程序后没有返回结果(重写run方法)
* Callable执行完线程程序后有返回结果 (重写call方法)
*/
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
for(int i=10;i>0;i--){
System.out.println(i);
}
return "鸡蛋卖空了!";//有返回结果
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


