成都网站建设设计

将想法与焦点和您一起共享

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

今天就跟大家聊聊有关Java中怎么使用Callable和Future创建线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、沐川网络推广、小程序开发、沐川网络营销、沐川企业策划、沐川品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供沐川建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

一 点睛

从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对象      // 使用FutureTask来包装Callable对象      FutureTask task = new FutureTask((Callable)() -> {        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的值:98main 的循环变量i的值:99有返回值的线程 的循环变量i的值:23有返回值的线程 的循环变量i的值:24有返回值的线程 的循环变量i的值:25......有返回值的线程 的循环变量i的值:94有返回值的线程 的循环变量i的值:95有返回值的线程 的循环变量i的值:96有返回值的线程 的循环变量i的值:97有返回值的线程 的循环变量i的值:98有返回值的线程 的循环变量i的值:99子线程的返回值:100

四 说明

程序先使用使用Lamda表达式创建一个Callable对象,然后将该实例包装成一个FutureTask对象。主线程中当循环变量i等于20时,程序启动以FutrueTask对象为target的线程。程序最后调用FutrueTask对象的get()方法来返回call()方法的返回值——该方法将导致主线程被阻塞,直到call()方法结束并返回为止。

看完上述内容,你们对Java中怎么使用Callable和Future创建线程有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


分享题目:Java中怎么使用Callable和Future创建线程
当前地址:http://chengdu.cdxwcx.cn/article/gppssd.html