您现在的位置是:主页 > news > ICP备案和实际网站不是一个名字/广告关键词排名
ICP备案和实际网站不是一个名字/广告关键词排名
admin2025/6/29 3:14:14【news】
简介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();}}}