Java多线程Callable接口实现代码示例

作者:于亮 时间:2021-08-06 14:29:01 

对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。

Callable接口

接口定义:


@FunctionalInterface
public interface Callable<V> {
 V call() throws Exception;
}

从Callable的定义可以看出:

Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的,方法可以有返回值,并且可以抛出异常。但是Runnable不行。

Callable需要依赖FutureTask,用于接收运算结果。一个产生结果,一个拿到结果。FutureTask是Future接口的实现类,也可以用作闭锁。

简单实例

计算0到100相加,返回结果。


public class TestCallable {
 public static void main(String[] args) {
   CallableThreadDemo ctd = new CallableThreadDemo();
   //1.执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果
   FutureTask<Integer> result = new FutureTask<Integer>(ctd);
   new Thread(result).start();
   //2.接收线程运算后的结果
   try {
     Integer sum = result.get(); //FutureTask 可用于闭锁
     System.out.println(sum);
   } catch (InterruptedException | ExecutionException e) {
     e.printStackTrace();
   }
 }
}
class CallableThreadDemo implements Callable<Integer>{
 @Override
 public Integer call() throws Exception {
   int sum = 0;
   for (int i = 0; i <= 100; i++) {
     sum += i;
   }
   return sum;
 }
}

总结

Callable接口其实特别简单,在多线程环境中,返回结果。

希望本文所述对大家了解多线程及callable接口有所帮助。感兴趣的朋友可以继续参阅本站:浅谈Java面向接口编程、Java编程接口回调一般用法代码解析等。感谢大家对本站的支持!

来源:http://blog.csdn.net/jiuqiyuliang/article/details/62426518

标签:java,多线程,接口
0
投稿

猜你喜欢

  • java实现简单猜拳小游戏

    2021-09-01 07:49:46
  • Spring实现处理跨域请求代码详解

    2023-11-25 12:28:34
  • 教你怎么用Java开发扫雷游戏

    2023-07-22 09:49:26
  • 利用Lambda表达式创建新线程案例

    2023-08-26 23:16:00
  • java 对象输入输出流读写文件的操作实例

    2021-06-13 15:24:30
  • Java实现矩阵加减乘除及转制等运算功能示例

    2023-07-05 04:49:53
  • 一文详解Java中的Stream的汇总和分组操作

    2021-12-24 17:32:54
  • Fluent Mybatis零xml配置实现复杂嵌套查询

    2022-02-03 19:34:32
  • MyBatis超详细讲解如何实现分页功能

    2023-08-22 23:06:51
  • 解决Java中OutOfMemoryError的问题

    2023-01-26 13:51:03
  • spring Bean创建的完整过程记录

    2022-04-14 03:57:51
  • C#生成随机验证码代码分享

    2023-07-17 21:22:26
  • SpringBoot中@Import注解如何正确使用

    2023-07-28 12:36:16
  • Java Socket实现单线程通信的方法示例

    2022-04-22 15:43:02
  • java实现读取、删除文件夹下的文件

    2021-12-06 20:07:48
  • Java掩码的几种使用例举

    2022-02-11 11:08:04
  • Spring @Conditional注解原理解析

    2022-10-04 16:09:51
  • 详解JAVA Spring 中的事件机制

    2022-01-13 05:26:33
  • mybatis-plus的批量新增/批量更新以及问题

    2022-10-28 04:44:16
  • 详解Android自定义控件属性TypedArray以及attrs

    2023-06-20 05:13:41
  • asp之家 软件编程 m.aspxhome.com