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 "鸡蛋卖空了!";//有返回结果 } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。