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

Java多线程大全

文章目录

  • 简介
    • 多线程使用场景
      • 后台任务:
    • 多线程的基本概念
      • Java程序是如何运行的?
  • 线程的创建和启动
    • 1、线程的创建和启动
      • 1.1、继承Thread类
      • 1.2、实现Runnable接口
    • 2、线程的调度与控制
      • 2.1、线程优先级
      • 2.2、Thread.sleep
    • 3、Thread中几个方法、属性
      • 3.1、wait、notify、notifyAll
      • 3.2、yield
      • 3.3、join
      • 3.4、interrupt、isInterrupted
    • Callable、Future
      • 为什么使用Callable?
      • 1、Callable
      • 2、Runnable VS Callable
      • 3、执行机制
      • 4、异常处理
      • 5、ExecutorService
      • 6、Future
      • 7、FutureTask
      • 8、总结
    • CompletableFuture
      • 一、创建异步任务
        • 1、Future.submit
        • 2、supplyAsync / runAsync
      • 二、异步回调
        • 1、thenApply / thenApplyAsync
        • 2、thenAccept / thenRun
        • 3、exceptionally
        • 4、whenComplete
        • 5、handle
      • 三、组合处理
        • 1、thenCombine / thenAcceptBoth / runAfterBoth
        • 2、applyToEither / acceptEither / runAfterEither
        • 3、thenCompose
        • 4、allOf / anyOf
  • 线程池
    • 前言
    • 线程池实现原理
    • 创建线程池的几种方式
      • 1、newFixedThreadPool
      • 2、newCachedThreadPool
      • 3、newScheduledThreadPool
      • 4、newSingleThreadExecutor
      • 5、newSingleThreadScheduledExecutor
      • 6、newWorkStealingPool
    • 线程组和线程池的区别
  • 线程组
    • ThreadGroup
  • ForkJoinPool 分支/合并框架
    • 一、Fork/Join框架简介
    • 二、Fork/Join 框架与线程池的区别
    • 三、示例代码
  • 线程的生命周期
    • 线程的生命周期(面试问的多)
  • 多线程辅助类
    • 1、CountDownLatch
      • 1、例子:
      • 2、例子
    • 2、CyclicBarrier
      • 1、例子
      • 2、例子
      • 3、例子
      • 4、例子
      • 5、场景案例
      • 总结:
    • 3、Semaphore
      • 1、Semaphore是什么
      • 2、应用场景
      • 3、例子
    • 总结:
  • ThreadLocal
    • ThreadLocal
    • ThreadLocal 的作用
    • ThreadLocal的应用场景
    • 使用案例
  • 线程的同步(加锁)
    • 1、为什么需要同步
    • 2、synchronized
    • 3、volatile
    • 4、解决线程安全问题
    • 5、Java多线程之死锁的出现和解决方法
      • 1、什么是死锁?
      • 2、synchronized嵌套
      • 3、死锁出现的原因
      • 4、死锁的解决方法
        • 4.1、Synchronized
          • 1、可重入
          • 2、使用案例
          • 3、可重入案例
        • 4.2、ReentrantLock
          • 1、trylock
          • 2、lockInterruptibly
        • 4.3、ReadWriteLock
          • 小结:
        • 4.4、ReentrantReadWriteLock
        • 4.5、LockSupport
          • 1、有什么用
          • 2、Object的和LockSupport对比
          • 3、总结
        • 4.6、StampedLock
        • 4.7、Condition
          • 使用Object的wait()和notify()实现:
          • 使用Condition实现
  • 锁的分类
    • 1、公平锁/非公平锁
    • 2、可重入锁
      • 模拟不可重入锁
      • 模拟可重入锁
      • 总结
    • 3、独享锁/共享锁
    • 4、互斥锁/读写锁
    • 5、乐观锁/悲观锁
    • 6、分段锁
    • 7、自旋锁
    • 8、偏向锁/轻量级锁/重量级锁
      • 存在目的【Synchronized锁膨胀过程】
      • 偏向锁
      • 轻量级
      • 重量级锁
  • Atomic包
    • 原子操作类简介
    • 只保证原子性
    • juc.atomic子包的结构层次
      • 原子更新基本类型
        • 常用方法
    • AtomicInteger
    • AtomicIntegerArray
      • 常用方法
    • 原子更新引用类型
      • 常用方法
      • AtomicReference使用实例
    • 原子更新字段类型
      • 常用方法
      • AtomicIntegerFieldUpdater使用实例
    • 总结
  • synchronized锁膨胀
    • 从偏向锁到重量级锁
      • 锁对象
      • 偏向锁
        • 那么,什么是偏向锁?
      • 锁膨胀
      • 锁撤销
      • 轻量级锁
        • 自旋锁
        • 自适应自旋锁
      • 重量级锁
        • 为什么说重量级锁开销大呢
      • 总结
    • 性能测试
      • 在线制作折线图
      • 针对synchronized和ReentrantLock
      • 结论
    • 通过OpenJDK分析synchronized
      • 为什么要使用OpenJDK?
      • OpenJDK官网
      • GitHub地址
      • 下载JDK11
      • 解压目录结构
      • synchronized的相关代码位置
      • 简单分析
        • 总结
      • 源码深入分析
    • 锁膨胀解决方案
      • Synchronized会发生锁膨胀,改用Lock
      • Synchronized 和 Lock 的主要区别
      • ReentrantLock
  • AQS
    • 1、AQS原理
    • 2、AQS的核心思想
    • 3、模拟可重入锁和不可重入锁
      • 模拟不可重入锁
      • 模拟可重入锁
      • 总结
    • 借助ReentrantLock分析AQS
      • 创建ReentrantLock
      • ReentrantLock默认构造参数
      • 第一个线程进来获取锁
      • 第二个线程进来获取锁
      • 释放锁并且唤醒其他线程
      • 释放锁【队列中没有其他线程等待锁】
  • CAS
    • 一、什么是CAS
    • 二、CAS的目的
    • 三、CAS存在的问题
      • 四、concurrent包的实现

简介

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。

多线程使用场景

后台任务:

  1. 如定时向大量(100W以上)的用户发送邮件

  2. 定期更新配置文件

  3. 任务调度(如quartz)

  4. 一些监控用于定期信息采集

  5. 自动作业处理:比如定期备份日志、定期备份数据库。

  6. 异步处理:如发微博、记录日志。

  7. 页面异步处理:比如大批量数据的核对工作(有10万个手机号码,核对哪些是已有用户)。

  8. 数据库的数据分析(待分析的数据太多),数据迁移。

多线程的基本概念

串行/同步:一个一个执行

异步:一起执行

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle数据库中什么情况下需要使用游标
  • Hive自定义函数——简单使用
  • 【手机马达共振导致后主摄马达声音异常】
  • 2024自学手册——网络安全(黑客技术)
  • MyBatis-Plus代码生成器
  • Microsoft Edge 五个好用的插件
  • Flyway 校验机制
  • C# Winform调用控制台程序(通过Process类)
  • 使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库
  • Java语言程序设计基础篇_编程练习题**18.30 (找出单词)
  • 【网络】高级IO——LT和ET
  • 洛谷P8572
  • 1. ZYNQ 2. MPSOC 3. FPGA 4. Vitis 5. 项目
  • 如何用AI论文生成工具撰写一篇高质量的成人教育毕业论文
  • 【AI创作组】Matlab绘图基础之plot函数
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • css布局,左右固定中间自适应实现
  • IP路由与转发
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js对象的深浅拷贝
  • scrapy学习之路4(itemloder的使用)
  • 从重复到重用
  • 代理模式
  • 工作中总结前端开发流程--vue项目
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 记录:CentOS7.2配置LNMP环境记录
  • 检测对象或数组
  • 浏览器缓存机制分析
  • 前端_面试
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我的zsh配置, 2019最新方案
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 【干货分享】dos命令大全
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • #{} 和 ${}区别
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)计算机毕业设计ssm电影分享网站
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Scala的“=”符号简介
  • ***检测工具之RKHunter AIDE
  • .net core docker部署教程和细节问题
  • .net core 连接数据库,通过数据库生成Modell
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net mvc部分视图
  • .NET 材料检测系统崩溃分析
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NET关于 跳过SSL中遇到的问题
  • .NET值类型变量“活”在哪?
  • [ 物联网 ]拟合模型解决传感器数据获取中数据与实际值的误差的补偿方法