您现在的位置是:主页 > news > ICP备案和实际网站不是一个名字/广告关键词排名

ICP备案和实际网站不是一个名字/广告关键词排名

admin2025/6/29 3:14:14news

简介ICP备案和实际网站不是一个名字,广告关键词排名,如何做网站吸引广告商,网站开发的相关技能剖析JDK源码-Callable-(10) 一、简述 实现Callable类被当成创建多线程的第三种方式,那这种方式是如何实现的呢?Callable和Runnable同样是一个代表着任务的接口,看了Thread和Runnable的创建线程的方式,就可以看出他们一层套一层只…

ICP备案和实际网站不是一个名字,广告关键词排名,如何做网站吸引广告商,网站开发的相关技能剖析JDK源码-Callable-(10) 一、简述 实现Callable类被当成创建多线程的第三种方式,那这种方式是如何实现的呢?Callable和Runnable同样是一个代表着任务的接口,看了Thread和Runnable的创建线程的方式,就可以看出他们一层套一层只…

剖析JDK源码-Callable-(10)

一、简述

实现Callable类被当成创建多线程的第三种方式,那这种方式是如何实现的呢?Callable和Runnable同样是一个代表着任务的接口,看了Thread和Runnable的创建线程的方式,就可以看出他们一层套一层只为了实现某种功能。因为继承Thread的线程类不能继承其他父类,所以有了Runnable;在某些计算线程中需要程序抛出异常,因此有了Callable。

二、接口类的声明

@FunctionalInterface
public interface Callable<V> {}
  • interface 接口类。
  • 注解:@FunctionalInterface
    和Runnable接口相似,这是java 8新加入的一种注解,用来标记该接口是一个函数式编程接口。
    函数式编程接口:指该接口有且只有一个抽象方法
    但这种注解并不是必须的,如果加上了这个注解就必须满足他的条件,否则就会报错。
    意在做一个标记使编译器更好的进行检查。
  • 泛型< V >,指在实例化时需要指定对象类型,返回的数据类型。

三、内部方法

	V call() throws Exception;
  • 执行计算,返回结果,遇到算法内部问题无法计算时返回异常。

四、代码实现

1、实现Callable接口,需要声明返回值类型

2、重写call方法,需要处理抛出异常

3、创建目标对象

4、创建执行服务

5、提交执行

6、获取结果

7、关闭服务

//1、实现Callable接口,声明返回值类型boolean
public class CallableTest implements Callable<Boolean> {//2、重写call方法,处理抛出异常@Overridepublic Boolean call() throws Exception {System.out.println("线程执行体");return true;}public static void main(String[] args) {//3、实例化对象CallableTest  callable = new CallableTest ();//4、创建执行服务 ExecutorService service = Executors.newFixedThreadPool(1);//5、提交执行Future<Boolean> future = service.submit(callable );//6、获取结果	try {Boolean boolean = future .get();System.out.println(boolean);}catch (Exception e) {e.printStackTrace();}//7、关闭服务service.shutdown();}}

或者使用FutureTask方式执行

//1、实现Callable接口,声明返回值类型boolean
public class CallableTest implements Callable<Boolean> {//2、重写call方法,处理抛出异常@Overridepublic Boolean call() throws Exception {System.out.println("线程执行体");return true;}public static void main(String[] args) {//3、实例化对象CallableTest  callable = new CallableTest ();//4、封装到FutureTaskFutureTask<Boolean> futureTask = new FutureTask<Boolean>(callable);//5、代理类启动new Thread(futureTask).start();//6、获取结果	try {Boolean boolean = futureTask.get();System.out.println(boolean);}catch (Exception e) {e.printStackTrace();}}}