应优先实现 Runnable 或 Callable 接口而非继承 Thread 类,因后者受限于单继承、不可复用、易引发线程安全问题;必须继承时需职责单一、正确重写 run()、避免构造器启动、不复用实例,并注意共享状态的同步控制。
直接继承 Thread 类实现多线程虽简单,但实际开发中需谨慎使用,它在灵活性、复用性和设计规范上存在明显局限。
Java 不支持多重继承,一个类若已继承了其他父类(如业务实体类、框架基类),就无法再继承 Thread。此时强行改造继承体系会破坏原有设计,增加耦合。
start() 是启动线程的唯一合法方式,由 JVM 负责调度;若误调 run(),只是普通方法调用,不会开启新线程,所有代码仍在当前线程执行。
Thread 对象生命周期与单次执行强绑定:一旦进入 TERMINATED 状态,再次调用 start() 会抛出 IllegalThreadStateException。
每个 Thread 子类实例默认拥有独立的成员变量副本,看似“天然线程安全”,但若多个线程共享同一实例(例如单例模式下复用 Thread 对象),或通过外部引用暴露了可变状态,则仍存在竞态风险。
继承 Thread 类适合教学演示或极简
场景;生产环境更推荐组合优于继承的设计思路,用 Runnable + ExecutorService 构建清晰、可控、可扩展的并发模型。