当前位置: 首页 > news >正文

从线程基础到线程池

核心概念与基础

        线程的定义与生命周期

                线程定义

                        线程是操作系统能够进行运算调度的最小单位,是进程中的实际运作单位。一个进                          程中可以并发多个线程,每条线程并行执行不同的任务。

                生命周期:
public class ThreadStateDemo {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {try {Thread.sleep(1000);synchronized (ThreadStateDemo.class) {ThreadStateDemo.class.wait(500);}} catch (InterruptedException e) {e.printStackTrace();}});// NEW状态System.out.println("创建后: " + thread.getState()); // NEWthread.start();// RUNNABLE状态System.out.println("启动后: " + thread.getState()); // RUNNABLEThread.sleep(100);// TIMED_WAITING状态(sleeping)System.out.println("sleep中: " + thread.getState()); // TIMED_WAITINGThread.sleep(1000);synchronized (ThreadStateDemo.class) {// WAITING状态(waiting)System.out.println("wait中: " + thread.getState()); // WAITINGThreadStateDemo.class.notify();}thread.join();// TERMINATED状态System.out.println("结束后: " + thread.getState()); // TERMINATED}
}

多线程的优势与挑战(竞态条件、死锁等)

     优势
  1.         提高CPU利用率
  2.         提升程序响应速度
  3.         更好的资源利用
  4.         简化复杂任务处理
    挑战

     竞态:

public class RaceConditionDemo {private int count = 0;public void increment() {count++; // 非原子操作}public static void main(String[] args) throws InterruptedException {RaceConditionDemo demo = new RaceConditionDemo();Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {demo.increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {demo.increment();}});t1.start();t2.start();t1.join();t2.join();// 结果可能小于2000System.out.println("最终结果: " + demo.count);}
}

      死锁:

public class DeadlockDemo {private static final Object lock1 = new Object();private static final Object lock2 = new Object();public static void main(String[] args) {Thread t1 = new Thread(() -> {synchronized (lock1) {System.out.println("Thread1持有lock1");try { Thread.sleep(100); } catch (InterruptedException e) {}synchronized (lock2) {System.out.println("Thread1持有lock2");}}});Thread t2 = new Thread(() -> {synchronized (lock2) {System.out.println("Thread2持有lock2");try { Thread.sleep(100); } catch (InterruptedException e) {}synchronized (lock1) {System.out.println("Thread2持有lock1");}}});t1.start();t2.start();}
}

Java 线程的实现方式:Thread 类与 Runnable 接口

JVM 内存模型与线程安全

主内存与工作内存的关系

  • 主内存:就是我们所知的电脑内存条(RAM)。它是所有程序共享的、容量较大但速度相对较慢的存储区域。

  • 工作内存:这里指的是CPU高速缓存。为了弥补CPU超高的运算速度与主内存相对较慢的读写速度之间的巨大差距,现代CPU都设计了多级缓存(L1, L2, L3)。每个CPU核心都有自己的缓存。

主内存想象成公司中央文件柜(所有人共享,但距离远,速度慢)。
工作内存(CPU缓存)想象成每个员工自己办公桌上的文件夹(私人专用,距离近,速度快)。
员工(CPU)工作时,会先把中央文件柜的文件复印一份到自己的文件夹里。修改文件也是在复印件上改。公司有一套流程(MESI协议)来确保当某个员工修改了文件后,其他员工的复印件会作废或更新,从而保证大家最终看到的都是最新版本。

同步机制:synchronizedLock 的实现差异

线程池

线程池的组成部分

//把线程池看作一个公司团队
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize,     // 核心线程数 -> 正式员工数量maximumPoolSize,  // 最大线程数 -> 最大员工数量(含正式+临时)keepAliveTime,    // 临时工空闲存活时间unit,             // 时间单位workQueue,        // 任务队列 -> 待办任务列表threadFactory,    // 线程工厂 -> HR招聘方式handler           // 拒绝策略 -> 项目爆满时的应对策略
);

线程池的工作流程

常见线程池类型与适用场景

http://www.dtcms.com/a/577705.html

相关文章:

  • Android selinux policy单独编译与调试
  • XML介绍
  • 营销推广运营 网站wordpress关闭主循环
  • Linux MTD系统深度解析:从原理到实践
  • css第二天
  • Spring Boot 3.2 高性能架构实战:虚拟线程、原生镜像与响应式编程全解析
  • [vulhub靶机通关]DC-5(文件包含_sreen提权_)
  • 网站建设数据收集方法网站没建好可以备案吗
  • 返利网站开发计划书免费创建社区论坛网站
  • [Avoid-MPC] AvoidanceStateMachine | `Step`心跳函数 | Callback设计
  • Web 前端开发调试实战,从桌面浏览器到真机 WebView 的全链路可视化调试指南
  • FreeRTOS函数说明
  • 营销软件网站建设陕西省建设网官网首页
  • 网站团购功能怎么做wordpress移除工具栏
  • 确定性革命:从观察宇宙到编程现实
  • 【模板】二维前缀和 (牛客)
  • 品牌网站设计公司哪家好百度seo整站优化公司
  • wordpress做单页销售网站西部网站管理助手 伪静态
  • 如何用faiss强化基于mysql的文本检索
  • C++面试4-线程同步
  • 【LeetCode热题100(62/100)】搜索二维矩阵
  • 并发编程、锁、线程池知识整理<1>
  • 11种方法解决iPhone上共享相册不显示的问题[2025]
  • php网站制作教程美食网站开发的技术简介
  • Spring整合单元测试
  • 深入浅出理解克尔效应(Kerr Effect)及 MATLAB 仿真实现
  • 【区块链】二、案例1:汽车供应链区块链
  • 影刀RPA一键批量上传商品视频!AI智能处理,效率提升2000%[特殊字符]
  • 安卓/IOS工具开发基础教程:按键精灵一个简单的文字识别游戏验证
  • Python爬虫实战:澳元-人民币汇率历史数据获取与趋势分析