java中创建多线程需继承thread类并重写run()方法,再调用start()启动;直接调用run()不开启新线程;run()不可抛受检异常,避免死循环;start()仅可调用一次;可设名称、优先级和守护线程。

Java 中使用 Thread 类创建并启动多线程,核心是继承 Thread 类、重写 run() 方法,再调用 start() 启动线程。注意不能直接调用 run(),否则只是普通方法执行,不会开启新线程。
继承 Thread 类并重写 run() 方法
定义一个类继承 java.lang.Thread,然后覆盖 run() 方法,在其中编写线程要执行的逻辑:
-
run()是线程真正执行的任务入口,类似主线程的main() - 不要在
run()中抛出受检异常(如IOException),因为父类方法签名不声明异常;如需处理,应使用 try-catch - 避免在
run()中写死循环且无退出条件,否则线程可能无法结束
调用 start() 启动线程
创建子类实例后,必须调用 start() 方法,JVM 才会为其分配栈空间、调度执行:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
start()内部触发 JVM 启动新线程,并自动调用该线程的run()方法 - 重复调用
start()会抛出IllegalThreadStateException - 同一个
Thread实例只能启动一次;如需多次运行,应新建实例
设置线程名称和优先级(可选)
便于调试和资源调度,可在启动前设置:
- 通过构造函数或
setName(String)指定名称,例如new MyThread("Worker-1") - 用
setPriority(int)设置优先级(范围 1–10,默认为 5),但实际调度仍由操作系统决定,不保证严格生效 - 也可调用
setDaemon(true)将其设为守护线程(如日志监控),JVM 退出时会自动终止所有守护线程
完整示例代码
以下是一个简单但完整的例子:
class CounterThread extends Thread {
private int count = 0;
public CounterThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i
输出顺序不固定,体现多线程并发特性。注意捕获 InterruptedException 并恢复中断状态是良好实践。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










