线程是程序中一条独立的执行路径,共享进程内存但拥有私有栈;创建后必须调用start()才能真正并发执行,run()仅是普通方法调用。

线程创建的基本概念,核心就两点:**什么是线程**和**怎么让它真正跑起来**。不是写个方法就叫多线程,关键在于“独立执行流”这个本质。
线程是程序里一条独立的执行路径
你写的main方法一运行,就自动启动一个主线程。它从上到下按顺序执行代码——这就是一条执行流。而线程,就是你能主动再“开一条路”,让另一段代码和主线程互不干扰地往前走。
比如主线程在刷新界面,另一个线程在后台下载文件,两者不会因为一个慢就卡住另一个。它们共享同一个进程的内存(比如全局变量、对象堆空间),但各自有独立的栈(保存自己的局部变量和方法调用顺序)。
创建 ≠ 启动:start() 才是关键动作
很多人写完 run() 方法就直接调用 run(),结果发现代码还是从上到下串行执行——那根本没开新线程,只是普通方法调用。
必须调用 start() 方法,JVM 才会真正申请操作系统资源,分配栈空间,把线程送入就绪状态,等待 CPU 调度。只有这时,run() 里的代码才会在新线程中执行。
- run():只是个普通方法,谁调用就在谁的线程里执行
- start():触发线程生命周期起点,开启并发执行
两种最基础的创建方式,区别在哪
Java 提供两类入门路径,本质都是为了定义“新线程要干什么”:
- 继承 Thread 类:自定义类 extends Thread,重写 run()。简单直接,但受限于 Java 单继承——你的类不能再继承别的类了
- 实现 Runnable 接口:自定义类 implements Runnable,重写 run(),再把该对象传给 new Thread(runnable).start()。更灵活,任务逻辑和线程控制分离,是实际开发中最常用的方式
别被“并发”吓住:它不等于“同时”
单核 CPU 上,两个线程其实是快速轮流切换执行(宏观并行、微观串行);多核 CPU 上,才可能真正在不同核心上同时跑。但对初学者来说,只要记住:调用 start() 后,两个执行流就“可以交错推进”了——输出顺序不再确定,这才是并发最直观的表现。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











