今天就跟大家聊聊有关Java中怎么使用Callable和Future创建线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联建站专注于企业成都全网营销推广、网站重做改版、彭泽网站定制设计、自适应品牌网站建设、H5高端网站建设、商城网站制作、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为彭泽等各大城市提供网站开发制作服务。一 点睛
从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的值: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创建线程-创新互联
本文路径:https://www.cdcxhl.com/article32/cccgsc.html
成都网站建设公司_创新互联,为您提供网站营销、响应式网站、网站建设、营销型网站建设、小程序开发、外贸建站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联