Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第六章:多线程与并发

第六章:多线程与并发

6.3 实现线程的方式(继承Thread、实现Runnable)

在Java中,实现多线程编程主要有两种方式:

  1. 继承Thread类
  2. 实现Runnable接口

1. 继承Thread类

通过继承Thread类并重写其run()方法,可以定义一个线程的具体执行逻辑。

示例代码

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程执行逻辑:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start(); // 启动线程
    }
}

特点

  • 优点:简单直接,适合快速实现线程逻辑。
  • 缺点:由于Java是单继承,继承Thread类后无法再继承其他类,灵活性较低。

2. 实现Runnable接口

通过实现Runnable接口并实现其run()方法,将任务逻辑与线程控制分离。

示例代码

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程执行逻辑:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start(); // 启动线程
    }
}

特点

  • 优点:
    • 避免单继承限制,可同时实现其他接口或继承其他类。
    • 更适合资源共享(如多个线程共享同一个Runnable实例)。
  • 缺点:需要额外创建Thread对象来启动线程。

3. 两种方式的对比

对比项继承Thread类实现Runnable接口
继承限制占用继承名额无限制
资源共享每个线程独立实例可共享同一Runnable实例
代码复用性较低较高
推荐场景简单、独立的线程任务复杂、需资源共享的任务

4. 其他实现方式(补充)

  • Lambda表达式(Java 8+)
    简化Runnable接口的实现:

    new Thread(() -> System.out.println("Lambda线程")).start();
    
  • 实现Callable接口
    支持返回值和异常抛出,需配合FutureTask或线程池使用(详见并发工具类章节)。


总结

  • 优先选择实现Runnable接口,提高代码灵活性和可扩展性。
  • 继承Thread类适用于快速原型开发或简单场景。
  • 实际开发中,推荐结合线程池(如ExecutorService)管理线程资源。
Last Updated:: 3/27/25, 12:48 PM