Java创建线程真的有三种方式吗?

文章讨论了Java中创建线程的常见误解,指出通过`newThread().start()`是唯一真正创建线程的方式,而直接调用`run()`方法只会作为主线程的一部分执行。作者还分享了关于`start()`方法启动线程和`run()`方法执行的区别,以及其他非传统方式创建线程的背景和原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨
👀👀👀 个人博客:小奥的博客
👍👍👍:个人优快云
⭐️⭐️⭐️:传送门
🍹 本人24应届生一枚,技术和水平有限,如果文章中有不正确的内容,欢迎多多指正!
📜 欢迎点赞收藏关注哟! ❤️

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值