Java创建线程真的有三种方式吗?
(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨
👀👀👀 个人博客:小奥的博客
👍👍👍:个人CSDN
⭐️⭐️⭐️:传送门
🍹 本人24应届生一枚,技术和水平有限,如果文章中有不正确的内容,欢迎多多指正!
📜 欢迎点赞收藏关注哟! ❤️
文章目录
- Java创建线程的方式
- 可以直接调用run方法来启动线程吗
Java创建线程的方式
在面试中,我们会被经常问道:“ Java中的线程创建有几种方式? ”
这是一道很经典的八股文了,当然对于我们来说不在话下,答:“三种,继承Thread类、实现Runnable接口、实现Callable接口”。
是不是很简单,确实,但是你以为只有这三种方式吗?哈哈,那可不一定。
像一些其他的线程池啊,CompletableFuture类等,也都可以创建出线程。
不过,这些方式呢,其实并没有真正的创建出线程。
准确来说,这些都是属于在Java代码中使用多线程的不同方式。
严格来说,Java只有一种方式可以创建线程,就是通过new Thread().start()创建。
其实这样我们就能明白,以上的很多方式,其实底层都是通过new 来创建线程的,并且提供给用户使用。
关于这个问题,我们可以看这篇文章,其中有着很详细的解释:
大家都说Java有三种创建线程的方式!并发编程中的惊天骗局!
可以直接调用run方法来启动线程吗
这也是一个非常经典的面试题,很简单,但是会有很多小伙伴说不清楚其中的原理。
博主也在面试中遇到过,不过好在磕磕巴巴糊弄过去了,但是本着求知的态度,还是和大家一起学习下。
new Thread() 后,线程进入了新建状态。
调用start() 方法,会启动一个线程并且使线程进入了就绪状态,当分配到时间片之后就可以开始运行了。
start() 会执行线程的相应准备工作,然后自动执行 run()方法下的内容,这才是线程真正开始工作的过程。
如果直接执行run(),方法,会把run()方法当成一个main线程下的普通方法去执行,并且不会在某个线程中执行它。
更加具体的解析可以看如下文章:
为什么start方法会调用run方法?(为什么不能直接run来实现创建线程?
相关文章:
Java创建线程真的有三种方式吗?
(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…...
17-k8s控制器资源-job控制
job控制器:就是一次性任务的pod控制器,pod完成作业后不会重启,其重启策略是:Never 1,job控制器案例描述 启动一个pod,执行完成一个事件,然后pod关闭; 事件:计算π的值&a…...
lazarus:LCL 嵌入 fpwebview 组件,做一个简单浏览器
从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\lclembed 修改 lclembed.lpr 如下,将 fphttpapp. 注释掉,因为我用不上 a simple…...
c++类和对象新手保姆级上手教学(上)
前言: c其实顾名思义就是c语言的升级版,很多刚学c的同学第一感觉就是比c语言难学很多,其实没错,c里的知识更加难以理解可以说杂且抽象,光是类和对象,看起来容易,但想完全吃透,真的挺…...
可变参数(c/c++)
目录 一、C语言版本 二、C的实现方法 2.1数据包 2.2sizeof...运算符 2.3可变参数模板的使用 2.4emplace_back() 有时候我们在编写函数时,可能不知道要传入的参数个数,类型 。比如我们要实现一个叠加函数,再比如c语言中的printf,c中的emp…...
【数据结构】图
文章目录 图1.图的两种存储结构2.图的两种遍历方式3.最小生成树的两种算法(无向连通图一定有最小生成树)4.单源最短路径的两种算法5.多源最短路径 图 1.图的两种存储结构 1. 图这种数据结构相信大家都不陌生,实际上图就是另一种多叉树&…...
32.3K Star,再见 Postman,这款开源 API 客户端更香
Hi,骚年,我是大 G,公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 使用 API 工具来调试接口是后端开发经常会使用的,之前一直…...
Python循环语句——continue和break
一、引言 在Python编程中,循环是常见的控制流语句,它允许我们重复执行一段代码,直到满足某个条件为止。而在循环中,continue和break是两个非常重要的控制语句,它们可以帮助我们更加灵活地控制循环的行为。 二、contin…...
C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】
C面向对象程序设计-北京大学-郭炜【课程笔记(三)】 1、构造函数(constructor)1.1、基本概念 2、赋值构造函数2.1、基本概念2.1、复制构造函数起作用的三种情况2.2、常引用参数的使用 3、类型转换构造函数3.1、什么事类型转换构造函…...
Linux:搭建docker私有仓库(registry)
当我们内部需要存储镜像时候,官方提供了registry搭建好直接用,废话少说直接操作 1.下载安装docker 在 Linux 上安装 Docker Desktop |Docker 文档https://docs.docker.com/desktop/install/linux-install/安装 Docker 引擎 |Docker 文档https://docs.do…...
用HTML、CSS和JS打造绚丽的雪花飘落效果
目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetGBK"><style>* {margin: 0;padding: 0;}#box {width: 100vw;heig…...
订餐|网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
网上订餐系统目录 目录 基于springboot的网上订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能模块的实现 (1)用户注册界面 (2)用户登录界面 (3)菜品详情界面 (…...
从零开始学howtoheap:解题西湖论剑Storm_note
how2heap是由shellphish团队制作的堆利用教程,介绍了多种堆利用技术,后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境:从零开始配置pwn环境:从零开始配置pwn环境:优化pwn虚拟机配置支持libc等指…...
Rust 基本环境安装
rust 基本介绍请看上一篇文章:rust 介绍 rustup 介绍 rustup 是 Rust 语言的安装器和版本管理工具。通过 rustup,可以轻松地安装 Rust 编译器(rustc)、标准库和文档。它也允许你切换不同的 Rust 版本或目标平台,以及…...
【电源】POE系统供电原理(二)
转载本博客文章,请注明出处 上一篇文章中,有提到POE系统工作原理及动态检测机制,下面我们继续介绍受电端PD技术及原理。POE供电系统包含PSE、PD及互联接口部分组成,如下图所示。 图1 POE供电系统 PSE控制器的主要作用ÿ…...
GPU独显下ubuntu屏幕亮度不能调节解决方法
GPU独显下屏幕亮度不能调节(假设你已经安装了合适的nvidia显卡驱动),我试过修改 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash acpi_backlightvendor" ,没用。修改和xorg.conf相关的文件,…...
Linux篇:网络基础1
一、网络基础:网络本质就是在获取和传输数据,而系统的本质是在加工和处理数据。 1、应用问题: ①如何处理发来的数据?—https/http/ftp/smtp ②长距离传输的数据丢失的问题?——TCP协议 ③如何定位的主机的问题&#…...
RK3568笔记十七:LVGL v8.2移植
若该文为原创文章,转载请注明原文出处。 本文介绍嵌入式轻量化图形库LVGL 8.2移植到Linux开发板ATK-RK3568上的步骤。 主要是参考大佬博客: LVGL v8.2移植到IMX6ULL开发板_lvgl移植到linux-CSDN博客 一、环境 1、平台:rk3568 2、开发板:…...
C#系列-C#访问MongoDB+redis+kafka(7)
目录 一、 C#中访问MongoDB. 二、 C#访问redis. 三、 C#访问kafka. C#中访问MongoDB 在C#中访问MongoDB,你通常会使用MongoDB官方提供的MongoDB C#/.NET Driver。这个驱动提供了丰富的API来执行CRUD(创建、读取、更新、删除&#x…...
(12)Hive调优——count distinct去重优化
离线数仓开发过程中经常会对数据去重后聚合统计,count distinct使得map端无法预聚合,容易引发reduce端长尾,以下是count distinct去重调优的几种方式。 解决方案一:group by 替代 原sql 如下: #7日、14日的app点击的…...
电源BOM砍掉30%!这颗SiC PSR芯片让12W-200W设计更简单
摘要:传统反激电源设计中,光耦反馈网络、TL431基准源、补偿电路占据了大量BOM成本与PCB面积。芯茂微LP3798系列采用原边PSR架构内置/外推SiC功率管方案,无需光耦即可实现恒压恒流控制,全系满足7级能效,待机功耗<75m…...
使用Taotoken聚合端点一个月,我的API调用延迟与稳定性观察记录
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken聚合端点一个月,我的API调用延迟与稳定性观察记录 1. 项目背景与接入动机 我最近的一个个人项目需要持续…...
嵌入式开源项目高效学习指南:从筛选评估到深度贡献
1. 项目概述:为什么我们需要一份“开源项目精选”?如果你是一名嵌入式开发者,或者正在向这个领域转型,那么你一定经历过这样的时刻:GitHub上项目浩如烟海,技术论坛帖子日更千条,想找一个靠谱的、…...
Perplexity搜索功能隐藏入口全解锁:9个未公开Pro技巧,第7个连官方文档都没写!
更多请点击: https://intelliparadigm.com 第一章:Perplexity搜索功能隐藏入口全解锁:现象与价值重估 Perplexity.ai 的公开界面长期以简洁问答框为核心,但其底层实际嵌套了多组未在UI中显式暴露的高级搜索能力——包括语义过滤、…...
[实战剖析] 从零构建CSRF攻击:GET与POST请求的攻防博弈
1. CSRF攻击的本质与危害 跨站请求伪造(CSRF)就像有人偷偷用你的手机给朋友发消息。想象你登录了社交网站没有退出,这时访问了恶意网页,它就能冒充你执行加好友、改资料等操作。这种攻击不需要窃取密码,只要浏览器保持…...
Lusca CSP策略完全指南:构建安全的内容安全策略
Lusca CSP策略完全指南:构建安全的内容安全策略 【免费下载链接】lusca Application security for express apps. 项目地址: https://gitcode.com/gh_mirrors/lu/lusca Lusca是一款专为Express应用打造的安全中间件,提供了全面的内容安全策略&…...
从提示词到成片:2026年AI视频工作流效率革命——Top 5工具的Prompt工程兼容度、重绘响应延迟与跨平台资产复用率实测
更多请点击: https://intelliparadigm.com 第一章:2026年AI视频生成工具全景图谱与评测方法论 截至2026年,AI视频生成已从实验性原型迈入工业化应用阶段,工具生态呈现“三极分化”格局:消费级轻量工具专注短视频创意提…...
5分钟搞定U盘验货!这款绿色工具真香到离谱
兄弟们,你有没有买过那种“1TB只要39块还包邮”的U盘? 醒醒!那玩意儿大概率是扩容盘——实际容量可能只有64GB,超出部分写进去的数据全是空气,轻则文件损坏,重则项目代码全丢,救都救不回来&…...
百度网盘直链解析终极指南:3分钟实现高速下载的完整教程
百度网盘直链解析终极指南:3分钟实现高速下载的完整教程 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘下载速度慢而烦恼吗?每次下载大…...
AzurLaneAutoScript:解放双手的碧蓝航线智能自动化脚本
AzurLaneAutoScript:解放双手的碧蓝航线智能自动化脚本 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为《…...
