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

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

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

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

  • 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()方法来获得子线程执行结束后的返回值。

二 代码

publicclassThirdThread
{
publicstaticvoidmain(String[]args)
{
//创建Callable对象
ThirdThreadrt=newThirdThread();
//先使用Lambda表达式创建Callable<Integer>对象
//使用FutureTask来包装Callable对象
FutureTask<Integer>task=newFutureTask<Integer>((Callable<Integer>)()->{
inti=0;
for(;i<100;i++)
{
System.out.println(Thread.currentThread().getName()
+"的循环变量i的值:"+i);
}
//call()方法可以有返回值
returni;
});
for(inti=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()
+"的循环变量i的值:"+i);
if(i==20)
{
//实质还是以Callable对象来创建、并启动线程
newThread(task,"有返回值的线程").start();
}
}
try
{
//获取线程返回值
System.out.println("子线程的返回值:"+task.get());
}
catch(Exceptionex)
{
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

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

发布于 2021-03-24 01:23:03
收藏
分享
海报
0 条评论
165
上一篇:JdbcTemplate怎么在springBoot中使用 下一篇:如何正确的使用smarty模板
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码