# JavaThread **Repository Path**: qkele/java-thread ## Basic Information - **Project Name**: JavaThread - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2026-03-25 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 线程核心知识点学习笔记 ```markdown # Java 线程核心知识点学习笔记 ## 一、基础概念 1. **程序**:一段静态的代码,是指令和数据的集合。 2. **进程**:程序运行时的状态,拥有独立的内存空间,是操作系统分配资源的基本单位。 3. **线程**:进程内部的最小执行单元,共享进程内存,是CPU调度的基本单位。 4. **多线程**:一个进程中同时运行多个线程,提高程序执行效率、充分利用CPU资源。 --- ## 二、线程的创建方式(3种) ### 1. 继承 Thread 类 - 步骤:继承Thread → 重写run() → 创建对象 → 调用start()启动 - 注意:不能直接调用run(),否则只是普通方法,不是多线程 ```java class MyThread extends Thread { @Override public void run() { // 线程执行的任务 } } // 启动 new MyThread().start(); ``` ### 2. 实现 Runnable 接口(推荐) - 解决Java单继承限制 ```java class MyRunnable implements Runnable { @Override public void run() { // 线程执行的任务 } } new Thread(new MyRunnable()).start(); ``` ### 3. 实现 Callable 接口 - 优点:可以有返回值、可以抛出异常 ```java class MyCallable implements Callable { @Override public String call() throws Exception { return "任务执行完成"; } } // 使用 FutureTask task = new FutureTask<>(new MyCallable()); new Thread(task).start(); ``` --- ## 三、线程生命周期(5大状态) 1. **新建状态**:new Thread() 创建对象 2. **就绪状态**:调用start(),等待CPU执行 3. **运行状态**:获得CPU时间片,执行run() 4. **阻塞状态**:主动等待/等待锁/休眠,暂时停止执行 5. **终止状态**:run()执行完毕/异常退出,线程死亡 --- ## 四、常用线程方法 - `start()`:启动线程,进入就绪状态 - `run()`:线程执行的核心逻辑 - `sleep(long ms)`:线程休眠,不释放锁 - `yield()`:让出CPU执行权,回到就绪状态 - `join()`:等待该线程执行完毕,再继续执行其他线程 - `setPriority(int)`:设置线程优先级(1-10) - `interrupt()`:中断线程状态 --- ## 五、线程安全(重点) ### 1. 出现原因 多个线程同时操作**共享数据**,导致数据错乱、结果不一致。 ### 2. 解决方案:加锁 #### ① synchronized 关键字(自动锁) - 修饰方法:当前对象锁 - 修饰代码块:自定义锁对象 ```java // 同步方法 public synchronized void method() { // 安全代码 } // 同步代码块 synchronized (锁对象) { // 安全代码 } ``` #### ② Lock 锁(手动锁) ```java Lock lock = new ReentrantLock(); lock.lock(); // 加锁 try { // 安全代码 } finally { lock.unlock(); // 释放锁 } ``` --- ## 六、线程通信 用于线程之间的等待与唤醒,常用在生产者消费者模式 - `wait()`:线程等待,释放锁 - `notify()`:随机唤醒一个等待线程 - `notifyAll()`:唤醒所有等待线程 --- ## 七、线程池(企业开发必用) ### 1. 优点 - 避免频繁创建销毁线程 - 控制并发数量 - 提高程序性能 ### 2. 创建方式 ```java // 固定大小线程池 ExecutorService pool = Executors.newFixedThreadPool(3); // 提交任务 pool.submit(new MyRunnable()); // 关闭线程池 pool.shutdown(); ``` --- ## 八、多线程核心特性(面试必问) 1. **原子性**:操作不可分割,要么全部执行,要么不执行 2. **可见性**:一个线程修改共享变量,其他线程能立即看到 3. **有序性**:代码按照编写顺序执行,不被指令重排优化 --- ## 九、总结 1. 线程是程序执行的最小单元,多线程可以提高效率 2. 创建线程:Thread、Runnable、Callable 3. 线程安全:synchronized / Lock 4. 线程通信:wait()、notify() 5. 企业开发:优先使用线程池 ```