继承Thread类是最直观的多线程入门方式,需重写run()方法并用start()启动线程,不可直接调用run();建议命名线程、添加sleep增强并发可见性。

直接用继承 Thread 类的方式,是最直观的入门写法。它不依赖额外接口或复杂结构,适合刚接触多线程的新手快速看到“并发”效果。
写一个继承 Thread 的子类
新建一个类,比如 MyThread,让它 extends Thread,然后重写 run() 方法。这个方法里放你想让线程做的事——比如循环打印、计数、延时等。
- run() 是线程真正执行逻辑的地方,不是靠你手动调用,而是由 JVM 在线程启动后自动回调
- 不要在 main 里直接调 run(),那样只是普通方法调用,不会开启新线程
- 记得加 @Override 注解,避免拼错方法名导致静默失败
用 start() 启动线程,不是 run()
创建子类对象后,调用 start() 才会真正触发操作系统创建并运行一个新线程。
- start() 内部会做两件事:申请系统资源创建线程 + 调用 run()
- 重复调用 start() 会抛出 IllegalThreadStateException,一个线程只能启动一次
- 主线程(main)和子线程是并行的,main 结束不影响子线程继续运行(除非是守护线程)
给线程起个名字,方便调试
默认线程名是 Thread-0、Thread-1,看不出业务含义。建议从一开始就有意识地命名:
立即学习“Java免费学习笔记(深入)”;
- 构造时传入名称:new MyThread("Downloader")
- 或者创建后调用 setName("Parser")
- 在 run() 里用 getName() 获取当前线程名,输出日志时带上,排查交错输出就轻松多了
加点 sleep 让并发效果更明显
如果 run() 里跑得太快,可能一个线程就全执行完了,看不到“交错”的并发感。插入 Thread.sleep(100) 可以人为制造停顿,让 CPU 有机会切换到其他线程。
- sleep 会抛出 InterruptedException,必须处理:要么 try-catch,要么在方法签名加 throws
- 别用 wait() 或 join() 这类需要锁配合的方法——新手阶段先绕开同步机制
- 简单循环 + sleep 就足够演示两个线程交替执行了


















