Callable 接口实现多线程| 学习笔记

简介: 快速学习 Callable 接口实现多线程.

开发者学堂课程【Java高级编程:Callable 接口实现多线程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/20/detail/282


Callable 接口实现多线程


内容介绍

一、接口的定义

二、范例:使用 Callable 实现多线程处理

三、面试题:请解释 Runnable 与 Callable 的区别?


从最传统的开发来讲如果要进行多线程的实现肯定依靠的就是 Runnable

但是 Runnable 接口有一个缺点:当线程执行完毕之后后无法获取一个返回值,所以从 JDK 1.5 之后就提出了一个新的线程实现接口: java.util.concurrent.Collable 接口。


一、接口的定义

@FunctionalInterface.

public interface callable {

public V call() throws Exception ;

}

可以发现 Callable 定义的时候可以设置一个泛型,此泛型的类型就是返回数据的类型,这样的好处是可以避免向下转型所带来的安全隐患。

图片20.png

二、范例:使用 Callable 实现多线程处理

class MyThread implements callable {

@override

public string call() throws Exception {

for (int x = 0 ; x < 10 ; x ++) {

system.out.println("*********线程执行、× = " +x);

}

return "线程执行完毕。";

}

}

public class ThreadDemo {

public static void main(String[] args) throws Exception {

FutureTask task = new FutureTask<>(new MyThread()) ;

new Thread(task).start();

System.out.println("【线程返回数据】" + task.get());

}

}

 

三、面试题:请解释 Runnable 与  Callable 的区别?

 1.Runnable 是在 JDK1.0的时候提出的多线程的实现接口,而 Callable 是在 JDK 1.5之后提出的;

2.java.lang.Runnable 接口之中只提供有一个 run()方法,并且没有返回值;

3.java.util.concurrent.Callable 接口提供有 call()方法,可以有返回值;

相关文章
|
5月前
|
存储 Java
高并发编程之多线程锁和Callable&Future 接口
高并发编程之多线程锁和Callable&Future 接口
69 1
|
5月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
99 0
|
2月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
5月前
|
安全 Java
多线程(CAS, ABA问题, Runnable & Callable & 僵尸线程 & 孤儿进程)
多线程(CAS, ABA问题, Runnable & Callable & 僵尸线程 & 孤儿进程)
49 1
|
5月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
49 3
|
5月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
39 1
|
5月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
42 1
|
5月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
42 1
|
5月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
56 4
|
5月前
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
27 1
下一篇
无影云桌面