Java程序默认运行在主线程,多线程即多个“小工人”共享内存但各用独立栈;微信是一个进程,收消息、传文件、刷朋友圈由其内不同线程并发执行。

直接从“程序在跑什么”讲起,比先抛概念更自然。初学者容易卡在“进程/线程/并发”这些词上,其实只要抓住一个核心:Java 程序默认跑在主线程里,而多线程就是让多个“小工人”同时干活,共享同一间办公室(内存),但每人有自己的一张桌子(栈)。
用生活例子说清进程和线程
打开微信是一个进程——它独占一块内存空间,有自己的账号信息、聊天记录缓存;微信里边同时收消息、传文件、刷朋友圈,这三个动作分别由不同的线程完成——它们都在同一个微信进程里,共用那份账号数据,但各自执行、互不阻塞。进程像一家公司,线程就像公司里的不同员工,共享办公场地和资料,但各干各的活。
Java 中创建线程的两种主流方式
初学者先掌握以下两种,够用且不易出错:
-
实现 Runnable 接口:写一个类或用 lambda 表达式定义“要做的事”,再把它交给 Thread 对象去执行。好处是不破坏类的继承结构,推荐日常使用。
例如:new Thread(() -> System.out.println("我在新线程里")).start(); - 继承 Thread 类:自定义类 extends Thread,重写 run() 方法。适合教学演示,但因 Java 是单继承,实际项目中很少用。
⚠️ 关键提醒:必须调用 start() 启动线程;直接调用 run() 只是普通方法执行,不会开启新线程。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
线程不是“一开就完事”,它有明确的状态变化
一个线程从诞生到结束,会经历几个典型状态:
- NEW:刚 new 出来,还没 start
- RUNNABLE:已 start,正在等待 CPU 调度(注意:不等于“正在运行”,也可能在排队)
- RUNNING:真正拿到 CPU 时间片,在执行代码
- WAITING / TIMED_WAITING:比如调用了 wait() 或 sleep(1000),主动让出 CPU
- TERMINATED:run() 方法执行完毕,或异常退出
不用死记,写个小程序打印 Thread.currentThread().getState(),运行几次就直观了。
为什么多线程容易出问题?一句话点透
因为多个线程可能同时读写同一个变量。比如两个线程都执行 count++,看似简单一步,底层其实是“读值→加1→写回”三步。如果中间被打断,结果就会少加一次。这种“本该原子的操作被拆开执行”的现象,就叫竞态条件。后续学 synchronized 或 AtomicInteger,就是为解决它。

















