多线程
mischen520
JAVA高级架构师
展开
-
多线程工具类以及运用多线程详细示例代码
3.ChildTask类。4.LoopTask类。原创 2022-10-13 11:06:21 · 597 阅读 · 0 评论 -
JVM 对 Java 的 原 生 锁 做 了 哪 些 优 化 ?
由 于 Java 层 面 的 线 程 与 操 作 系 统 的 原 生 线 程 有 映 射 关 系 , 如 果 要 将 一个 线 程 进 行 阻 塞 或 唤 起 都 需 要 操 作 系 统 的 协 助 , 这 就 需 要 从 用 户 态 切 换到 内 核 态 来 执 行 , 这 种 切 换 代 价 十 分 昂 贵 , 很 耗 处 理 器 时 间 , 现 代 JDK中 做 了 大 量 的 优 化。 当 没 有 竞 争 出 现 时 , 默 认 会 使 用 偏 向 锁。...原创 2022-08-03 22:31:46 · 211 阅读 · 0 评论 -
ConcurrentHashMap实现原理
jdk7:数据结构:ReentrantLock+Segment+HashEntry,一个Segment中包含一个HashEntry数组,每个 HashEntry又是一个链表结构。元素查询:二次hash,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部。锁:Segment分段锁 Segment继承了ReentrantLock,锁定操作的Segment,其他的Segment不受影响,并发度为segment个数,可以通过构造函数指定,数组扩容不会影响其他的segment。get方原创 2022-07-03 08:34:00 · 104 阅读 · 0 评论 -
并发、并行、串行的区别
串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。并发允许两个任务彼此干扰。统一时间点、只有一个任务运行,交替执行...原创 2021-10-01 07:29:06 · 484 阅读 · 0 评论 -
多线程交替输出问题3种常用解法(多线程经典面试题)
题目:让两个多线程交替输出距离:“ABCDEF”和“123456”,输出结果为固定“A1B2C3D4E5F6”1.利用synchronized+wait/notifypackage com.mooc.house.user.controller;/** * @ClassName sync_wait_notify * @Description DOTO * @Author mischen * @Date 2021/9/30 0030 6:11 * @Version 1.0 **/pub原创 2021-09-30 06:24:47 · 810 阅读 · 0 评论 -
多线程经典面试题(show me the Difference)
指出以下两段程序的差别,并分析:final class Accumulator{ private double result=0.0D; public void addAll(double[] values){ for (double value :values){ result += value; } }}final class Accumulator2{ private double result=0.0D;原创 2021-09-26 06:32:31 · 190 阅读 · 0 评论 -
JAVA合理设置线程池技术探究以及demo示例
最近一直在研究线程池的使用原理,做过开发的同事都知道,要设置合理的线程池需要考虑的因素太多,特别是高并发情况下,如果不合理的设置线程池数量,有可能会导致生产上面出现各种问题,比如cpu内存飙升,报线程池拒绝策略等等。那么,怎么来合理设置线程池大小呢?这里,我们就要先来说说服务器的分类了,一般来说,linux服务器可以分为2种类型,一种是CPU密集型,一种是IO密集型,CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行CPU密集任务只有在真正多核CPU上才可能得到加速(通过多原创 2021-03-21 08:43:28 · 151 阅读 · 0 评论 -
线程池ThreadPoolExecutor详解以及用法示例-详细的执行流程和内部解剖
1.先看一个面试题如果corepollSize=10,MaxPollSize=20,如果来了40个线程 怎么办?要想回答这一个问题,其实不难,只要了解了线程池内部的工作原理就知道怎么回答了。先来看看线程池的整个运行机制:当一个任务通过execute(Runnable)方法欲添加到线程池时: 1、 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。 2、 如果此时线程池中的数量等于 corePoolSize,但是缓冲队列原创 2021-03-20 09:19:19 · 1424 阅读 · 0 评论 -
ThreadLocal示例用法详解以及底层实现原理
threadLocal是java里面的一种特殊变量,旨在为java多线程提供变量的副本,用于保证java多线程环境的变量安全问题。就是每个线程都可以使用这个变量声明的副本,自己去处理自己的数据而不相互影响。具体示例代码如下:package com.mooc.house.user.common;public class Demo1 { /** threadLocal变量,每个线程都有一个副本,互不干扰 */ public static ThreadLocal<String原创 2021-02-21 09:09:41 · 170 阅读 · 2 评论 -
Hashmap 为什么线程不安全(hash 碰撞和扩容导致)
原创 2020-03-23 22:08:13 · 837 阅读 · 0 评论 -
synchronized锁和lock锁的区别?
方法锁主要包括:synchronized锁和lock锁区别:1)Lock是一个接口,而synchronized是Java中的关键字;2)synchronized当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,不能够响应中断,(释放:1执行完线程自动释放2发生异常jvm让线程释放)((比如调用sleep方法)),这样的好处是不会导致死锁现象发生...原创 2020-03-21 09:36:42 · 2654 阅读 · 0 评论 -
Synchronized和ReentrantLock的实现原理有什么不同
其 实 , 锁 的 实 现 原 理 基 本 是 为 了 达 到 一 个 目 的 :让 所 有 的 线 程 都 能 看 到 某 种 标 记 。Synchronized 通 过 在 对 象 头 中 设 置 标 记 实 现 了 这 一 目 的 , 是 一 种 JVM原 生 的 锁 实 现 方 式 , 而 ReentrantLock 以 及 所 有 的 基 于 Lock 接 口 的实 现 类 , ...原创 2020-03-15 10:28:27 · 547 阅读 · 0 评论 -
什么是AQS ?
AQS( AbstractQueuedSynchronizer 类 ) 是 一 个 用 来 构 建 锁 和 同 步 器的 框 架 , 各 种 Lock 包 中 的 锁 ( 常 用 的 有 ReentrantLock、ReadWriteLock) , 以 及 其 他 如 Semaphore、 CountDownLatch, 甚至 是 早 期 的 FutureTask 等 , 都 是 基...原创 2020-03-15 10:21:33 · 338 阅读 · 0 评论 -
为 什 么 说 Synchronized 是 非 公 平 锁
非 公 平 主 要 表 现 在 获 取 锁 的 行 为 上 , 并 非 是 按 照 申 请 锁 的 时 间 前 后 给 等待 线 程 分 配 锁 的 , 每 当 锁 被 释 放 后 , 任 何 一 个 线 程 都 有 机 会 竞 争 到 锁 ,这 样 做 的 目 的 是 为 了 提 高 执 行 性 能 , 缺 点 是 可 能 会 产 生 线 程 饥 饿 现 象 。...原创 2020-03-15 10:15:38 · 5894 阅读 · 5 评论