大话线程的三种使用方式(这个不知道就与BAT无缘了)
发布日期:2021-06-30 16:13:08
浏览次数:3
分类:技术文章
本文共 1627 字,大约阅读时间需要 5 分钟。
彩蛋提前播放
超神学院语录
我与各位并无冤仇,但,我为爱而战。
线程的三种使用方式
- 实现Runnable接口
- 实现Callable接口
- 继承Thread接口
实现
Runnable
和Callable
接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。
实现Runnable接口
通过实现Runnable接口使用线程,需要先实现Runable接口的run()
方法:
public class HelloRunnable implements Runnable { public void run() { // 逻辑代码 }}
实现Runable接口的类并不是真正的线程,需要线程对象Thread通过调用start()
方法启动线程。
线程使用方式如下:
public static void main(String[] args) { HelloRunnable instance = new HelloRunnable(); Thread thread = new Thread(instance); thread.start();}
实现Callable接口
与Runnable接口相比,Callable可以有返回值,返回值通过FutureTask进行封装。
public class HelloCallable implements Callable{ public Integer call() { return 999; }}
和Runnable不同,实现Callable的类需要实现call()
方法。
public static void main(String[] args) throws ExecutionException, InterruptedException { HelloCallable hc = new HelloCallable(); FutureTaskft = new FutureTask<>(hc); Thread thread = new Thread(ft); thread.start(); System.out.println(ft.get());}
继承Thread类(不推荐)
与 Runnable相似,需要实现run() 方法,实际上Thread类也继承了Runable接口。
但是不需要声明线程对象去调用start方法,因为继承了Thread类。当调用 start() 方法启动一个线程时,虚拟机会将该线程放入就绪队列中等待被调度,当一个线程被调度时会执行该线程的 run() 方法
声明线程对象:
public class HelloThread extends Thread { public void run() { // 逻辑代码 }}
使用线程对象:
public static void main(String[] args) { HelloThread ht = new HelloThread (); ht.start();}
实现接口与继承Thread
实现接口更推荐使用,因为:
- Java 不支持多重继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口;
- 类可能只要求可执行就行,继承整个 Thread 类开销过大。
Runnable接口与Thread之间的关系:
Thread负责线程本身相关的职责与控制,而Runable仅负责逻辑执行的单元,因此继承Thread开销会更大一些。转载地址:https://keepgoon.blog.csdn.net/article/details/115920448 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年05月03日 23时43分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Servlet_快速入门
2019-05-01
Servlet_生命周期方法
2019-05-01
Servlet_生命周期详解
2019-05-01
IDEA与tomcat相关配置
2019-05-01
Servlet_体系结构
2019-05-01
Servlet_urlpartten配置
2019-05-01
Request_原理
2019-05-01
Request_继承体系
2019-05-01
Request_获取请求行数据_方法介绍
2019-05-01
spring的优势
2019-05-01
前端权限控制:获取用户信息接口构造数据
2019-05-01
前端权限控制:实现思路分析-待修改
2019-05-01
有状态服务和无状态服务
2019-05-01
基于jwt的用户鉴权:配置拦截器并测试
2019-05-01
POI的概述
2019-05-01
DataURL:实现员工头像保存
2019-05-01
DataURL:员工头像回显
2019-05-01
七牛云存储:断点续传
2019-05-01
JasperReport:声明周期
2019-05-01
递归求阶乘
2019-05-01