当前位置: 首页 > news >正文

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来实现创建线程?

http://www.lryc.cn/news/301021.html

相关文章:

  • 17-k8s控制器资源-job控制
  • lazarus:LCL 嵌入 fpwebview 组件,做一个简单浏览器
  • c++类和对象新手保姆级上手教学(上)
  • 可变参数(c/c++)
  • 【数据结构】图
  • 32.3K Star,再见 Postman,这款开源 API 客户端更香
  • Python循环语句——continue和break
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】
  • Linux:搭建docker私有仓库(registry)
  • 用HTML、CSS和JS打造绚丽的雪花飘落效果
  • 订餐|网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
  • 从零开始学howtoheap:解题西湖论剑Storm_note
  • Rust 基本环境安装
  • 【电源】POE系统供电原理(二)
  • GPU独显下ubuntu屏幕亮度不能调节解决方法
  • Linux篇:网络基础1
  • RK3568笔记十七:LVGL v8.2移植
  • C#系列-C#访问MongoDB+redis+kafka(7)
  • (12)Hive调优——count distinct去重优化
  • 记录 | 验证pytorch-cuda是否安装成功
  • LeetCode 239.滑动窗口的最大值 Hot100 单调栈
  • 463. Island Perimeter(岛屿的周长)
  • 如何解决缓存和数据库的数据不一致问题
  • linux系统下vscode portable版本的python环境搭建003:venv
  • 使用TinyXML-2解析XML文件
  • Linux:docker在线仓库(docker hub 阿里云)基础操作
  • C语言程序设计(第四版)—习题7程序设计题
  • ZCC6982-同步升压充双节锂电池充电芯片
  • 定时器(基本定时器、通用定时器、高级定时器)
  • 009集——磁盘详解——电脑数据如何存储在磁盘