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.1 线程基础

6.1.1 什么是线程?

线程(Thread)是程序执行的最小单元,是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源(如内存空间、文件句柄等),但每个线程拥有独立的程序计数器、栈和局部变量。

6.1.2 线程与进程的区别

  • 进程:操作系统分配资源的基本单位,每个进程拥有独立的内存空间和系统资源。
  • 线程:进程内的执行单元,多个线程共享进程的资源,线程间的切换开销比进程小。

6.1.3 线程的优势

  1. 提高程序响应性:多线程允许程序在等待I/O操作时执行其他任务。
  2. 充分利用多核CPU:多线程可以并行执行,提高CPU利用率。
  3. 简化复杂任务:将任务分解为多个线程可以简化编程模型。

6.1.4 Java中的线程模型

Java通过java.lang.Thread类和java.lang.Runnable接口支持多线程编程。线程的创建和启动方式有两种:

  1. 继承Thread类:
    class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("Thread is running");
        }
    }
    MyThread thread = new MyThread();
    thread.start();
    
  2. 实现Runnable接口:
    class MyRunnable implements Runnable {
        @Override
        public void run() {
            System.out.println("Runnable is running");
        }
    }
    Thread thread = new Thread(new MyRunnable());
    thread.start();
    

6.1.5 线程的基本操作

  • 启动线程:调用start()方法,线程进入就绪状态。
  • 线程休眠:使用Thread.sleep(millis)让线程暂停执行。
  • 线程中断:通过interrupt()方法请求终止线程。
  • 等待线程结束:调用join()方法等待线程执行完成。

6.1.6 线程的状态

Java线程的生命周期包括以下状态:

  1. NEW:线程被创建但未启动。
  2. RUNNABLE:线程正在运行或等待CPU资源。
  3. BLOCKED:线程等待获取锁。
  4. WAITING:线程无限期等待其他线程的通知。
  5. TIMED_WAITING:线程在指定时间内等待。
  6. TERMINATED:线程执行完毕。

6.1.7 线程的优先级

Java线程的优先级范围为1(最低)到10(最高),默认优先级为5。可以通过setPriority(int priority)方法设置优先级,但实际调度取决于操作系统。

6.1.8 守护线程

守护线程(Daemon Thread)是为其他线程提供服务的线程,当所有非守护线程结束时,守护线程会自动终止。通过setDaemon(true)方法设置。

Thread daemonThread = new Thread(() -> {
    while (true) {
        System.out.println("Daemon thread running");
    }
});
daemonThread.setDaemon(true);
daemonThread.start();

6.1.9 线程的注意事项

  1. 线程安全问题:多个线程共享数据时可能导致数据不一致。
  2. 避免过度创建线程:线程的创建和销毁需要开销,建议使用线程池。
  3. 避免死锁:多个线程互相等待对方释放锁时会导致死锁。

以上是线程基础的核心内容,后续章节将深入探讨线程的生命周期、同步机制和并发工具类。

Last Updated:: 3/27/25, 12:48 PM