Java多线程大全

news2024/9/22 13:25:16

文章目录

  • 简介
    • 多线程使用场景
      • 后台任务:
    • 多线程的基本概念
      • 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. 数据库的数据分析(待分析的数据太多),数据迁移。

多线程的基本概念

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

异步:一起执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述: 利用 PyQt5 编写可视化界面是较为普遍的做法,但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时,在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路: 一个起点、一个终点 多源最短路: 可以多个起点…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址:Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件,有一个示例配置文件 conf/zoo_sample.cfg,此文件不能生效,需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表: ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址:https://www.sqlite.org/download.html 下载:sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹,将压缩包复制到该文件夹下,再在该目录下打开一个终端,执行…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;课程表 .1- 题目解析 .2- 代码编写 2&#xff09;课程表 II .1- 题目解析 .2- 代码编写 3&#xff09;火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来&#xff0c;随着AI技术的迅猛发展&#xff0c;尤其是ChatGPT等大语言模型的出现&#xff0c;全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌&#xff0c;在这场竞争中逐渐失去了领头羊的地位。然而&#xff0c;谷歌的创始人之一谢尔盖布林&#xff08;Sergey Br…

计算组合数

1.递推 #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; #define int long long //可能会超时 #define PII pair<int,int> const int INF 0x3f3f3f3f, mod 1e9 7; const int N 2005; int a, b,n; …

手机自动化测试环境之夜神模拟器inspector部署验证

1、自动化测试环境部署_总览图检查表流程图 Python需要安装Appium-Python-Clicent去定位元素&#xff1b;Appium是一个中间的服务器&#xff0c;它需要依赖node.js&#xff0c;python的脚本通过appium和手机进行交互&#xff1b;手机app的环境都是java环境&#xff0c;先安装jd…

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…

gitlab 的CI/CD (一)

前言 GitLab CI/CD 是一个内置在GitLab中的工具&#xff0c;用于通过持续方法进行软件开发&#xff1a; Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署 持续集成的工作原理是将小的代码块推送到Git仓库…

JavaEE: 深入探索TCP网络编程的奇妙世界(三)

文章目录 TCP核心机制TCP核心机制三: 连接管理建立连接(三次握手)断开连接(四次挥手)三次握手/四次挥手 流程简图 TCP核心机制 书接上文~ TCP核心机制三: 连接管理 建立连接(三次握手),断开连接(四次挥手). 这里的次数指的是网络通信的次数,挥手/握手是形象的比喻(handshake…

PM2.5粉尘传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 4.粉尘浓度转化关系 5.空气污染指数 三、程序设计 main.c文件 PM25.h文件 PM25.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 GP2Y1014AU是日本夏普公司开发的一款光学灰尘浓度检测传…

探索 Web Speech API:实现浏览器语音识别与合成

引言 Web Speech API 是一项由 W3C 开发的 Web 标准&#xff0c;为开发者提供了在 Web 应用程序中实现语音识别和语音合成的能力。通过 Web Speech API&#xff0c;我们可以让网页与用户进行语音交互&#xff0c;实现更加智能化和便捷的用户体验。本文将深入探讨 Web Speech A…