怎么在Java中利用Callable和Future创建线程

本篇文章为大家展示了怎么在Java中利用Callable和Future创建线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联建站是一家集网站建设,诸暨企业网站建设,诸暨品牌网站建设,网站定制,诸暨网站建设报价,网络营销,网络优化,诸暨网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

从Java 5开始,Java提供了Callable接口,该接口是Runnable接口的增强版,Callable接口提供了一个call()方法,可以看作是线程的执行体,但call()方法比run()方法更强大。

  • call()方法可以有返回值。

  • call()方法可以声明抛出异常。

创建并启动线程的步骤如下:

1 创建Callable接口的实现类,并实现call()方法,该call()方法将作为该线程的执行体,且该call()方法有返回值,再创建Callable的实例。从Java 8开始,可以直接使用Lamda表达式创建Callable对象。

2 使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

3 使用FutureTask对象作为Thread对象的target创建并启动新线程。

4 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

二 代码

public class ThirdThread
{
   public static void main(String[] args)
   {
      // 创建Callable对象
      ThirdThread rt = new ThirdThread();
      // 先使用Lambda表达式创建Callable<Integer>对象
      // 使用FutureTask来包装Callable对象
      FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)() -> {
        int i = 0;
        for ( ; i < 100 ; i++ )
        {
           System.out.println(Thread.currentThread().getName()
              + " 的循环变量i的值:" + i);
        }
        // call()方法可以有返回值
        return i;
      });
      for (int i = 0 ; i < 100 ; i++)
      {
        System.out.println(Thread.currentThread().getName()
           + " 的循环变量i的值:" + i);
        if (i == 20)
        {
           // 实质还是以Callable对象来创建、并启动线程
           new Thread(task , "有返回值的线程").start();
        }
      }
      try
      {
        // 获取线程返回值
        System.out.println("子线程的返回值:" + task.get());
      }
      catch (Exception ex)
      {
        ex.printStackTrace();
      }
   }
}

三 运行

main 的循环变量i的值:98
main 的循环变量i的值:99
有返回值的线程 的循环变量i的值:23
有返回值的线程 的循环变量i的值:24
有返回值的线程 的循环变量i的值:25
......
有返回值的线程 的循环变量i的值:94
有返回值的线程 的循环变量i的值:95
有返回值的线程 的循环变量i的值:96
有返回值的线程 的循环变量i的值:97
有返回值的线程 的循环变量i的值:98
有返回值的线程 的循环变量i的值:99
子线程的返回值:100

上述内容就是怎么在Java中利用Callable和Future创建线程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。

当前题目:怎么在Java中利用Callable和Future创建线程
本文地址:https://www.cdcxhl.com/article18/ieedgp.html

成都网站建设公司_创新互联,为您提供面包屑导航企业网站制作云服务器手机网站建设动态网站域名注册

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都seo排名网站优化