Callable实现多线程

欣喜 Java经验 发布时间:2024-02-23 17:44:50 阅读数:3076 1
下文笔者讲述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 "鸡蛋卖空了!";//有返回结果
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202402/17086815158032.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者