![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程
文章平均质量分 89
java并发编程
wangzhipeng47
这个作者很懒,什么都没留下…
展开
-
原创-java锁机制
java锁机制1.1什么是锁? 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。 锁通常需要硬件支持才能有效实施。这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"”。这些指令允许单个进程测试锁是否空闲,如果空闲,则通过单个原子操作获取锁。1.2.锁的一个重要属性 粒度...原创 2021-06-04 02:36:00 · 163 阅读 · 0 评论 -
java线程池原理
线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。例如Android中常见到的很多通用组件一般都离不开”池”的概念,如各种图片加载库,网络请求库,即使And...原创 2021-06-04 02:34:02 · 329 阅读 · 0 评论 -
java集合超详解
首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校会员中心收藏动态消息创作中心java集合超详解feiyanaffection2018-08-03 21:28:15191903收藏2774分类专栏:Java文章标签:Java集合超详解版权一、集合大纲1.集合和数组的区别:2.Collection集合的方法:3.常用集合的分类:Collection接口的接口 对象的集合(...转载 2021-05-15 02:15:22 · 287 阅读 · 0 评论 -
Java集合类源码分析汇总
首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校会员中心收藏动态消息创作中心Java集合类源码分析汇总舟2016-07-16 21:23:482253收藏2转自:http://www.cnblogs.com/hzmark/archive/2013/01/05/JavaCollectionSum.htmlJava集合类基础:http://www.cnblogs.com/hzmark/archive/20...转载 2021-05-15 02:10:02 · 201 阅读 · 0 评论 -
java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校会员中心收藏动态消息创作中心java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁朱清震2017-04-19 22:31:08112287收藏454分类专栏:java文章标签:java乐观锁悲观锁并发版权之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的...转载 2021-05-15 02:03:38 · 276 阅读 · 0 评论 -
原创--深入AQS原理
【深入AQS原理】我画了35张图就是为了让你深入 AQS前言谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。我们先看下AQS相关的UML图:image.png思维导图:image.pngAQS实现原理AQS中 维护了一原创 2021-05-12 19:25:04 · 125 阅读 · 0 评论 -
ConcurrentHashMap性能提升
ConcurrentHashMap中有十个提升性能的细节,你都知道吗?一些题外话如何在高并发下提高系统吞吐是所有后端开发者追求的目标,Java并发的开创者Doug Lea在Java 7 ConcurrentHashMap的设计中给出了一些参考答案,本文详细的总结了ConcurrentHashMap源码中影响并发性能的十个细节,有常见的自旋锁,CAS的使用,也有延迟写内存,volatile语义退化等不常见的技巧,希望对大家的开发设计有所帮助。由于ConcurrentHashMap的内容比较多,而且原创 2021-05-12 19:22:52 · 511 阅读 · 0 评论 -
手写阻塞队列
面试官让我手写阻塞队列,我真是醉了!某人:面试官你好,我叫开局一张嘴面试全靠吹,某某年毕业,毕业自家里蹲大学,做过某某项目。。。。。。面试官微微一笑,捋了捋稀疏的头发:看你简历,你精通多线程?那你手写过堵塞队列吗?某人心里出现一万个问号,堵塞队列是啥玩意?平时基本都是crud,顶多用多线程跑数据某人:没有手写过。面试官:哦,那你说下堵塞队列吧某人支支吾吾:这个有点忘了面试官:没事,那我们下一个。此处省略一万字。面试官扭了扭严重负荷的颈椎:先到这里吧,你先..原创 2021-05-12 19:12:44 · 156 阅读 · 1 评论 -
JUC并发编程之抽象同步队列AQS框架设计
多线程进阶,JUC并发编程之抽象同步队列AQS框架设计理念一探究竟1、学习切入点既然AQS是一个提供给我们使用的框架,那么我们可以看看这个框架都有哪些类依赖它。从框架来看,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...等。现在看来我们还有点懵逼,这个框架具体是怎么设计的?下面我们翻看源码注释一探究竟!其中AQS里面维护了一个Node节点构造的CLH队列(FI.原创 2021-05-12 19:06:32 · 161 阅读 · 0 评论 -
从 JMM 透析 volatile 与 synchronized 原理
从 JMM 透析 volatile 与 synchronized 原理在面试、并发编程、一些开源框架中总是会遇到volatile与synchronized。synchronized如何保证并发安全?volatile语义的内存可见性指的是什么?这其中又跟 JMM 有什么关系,在并发编程中 JMM 的作用是什么,为什么需要 JMM?与 JVM 内存结构有什么区别?我总结出里面的核心知识点以及面试重点,图文并茂无畏面试与并发编程,全面提升并发编程内功! JMM 与 JVM 内存结构有...原创 2020-11-05 18:29:04 · 204 阅读 · 0 评论 -
synchronized关键字详解
一个synchronized跟面试官扯了半个小时开场面试官: 你先自我介绍一下吧!安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗冷哼)!哦,不对,串场了,我是**,目前在--公司做--系统开发。面试官: 刚才听一面的同事说你们上次聊到了synchronized,你借口说要回去补篮,现在能跟我讲讲了吧?安琪拉: 【上来就丢钩子,都不寒暄几句,问我吃没吃】嗯嗯,是有聊到 synchronized。面试官: 那你跟我说说为什么会需要synchronized?什么场景下使用...原创 2020-11-05 18:21:49 · 295 阅读 · 0 评论 -
并发编程
并发编程!并发历史在计算机最早期的时候,没有操作系统,执行程序只需要一种方式,那就是从头到尾依次执行。任何资源都会为这个程序服务,在计算机使用某些资源时,其他资源就会空闲,就会存在浪费资源的情况。❝这里说的浪费资源指的是资源空闲,没有充分使用的情况。❞操作系统的出现为我们的程序带来了并发性,操作系统使我们的程序能够同时运行多个程序,一个程序就是一个进程,也就相当于同时运行多个进程。操作系统是一个并发系统,并发性是操作系统非常重要的特征,操作系统具有同时处理和调度多个程序...原创 2020-11-05 18:15:26 · 561 阅读 · 1 评论 -
synchronized使用详解
synchronized详解synchronized详解1修饰类方法,锁定的是整个类1.1同一类的不同对象,调用同一个静态同步方法,会等待锁释放SynchronizedStatic静态同步方法import java.util.Calendar;public class SynchronizedStatic { public synchronized static void testThreadA(){ try { Thread.sleep(1000); ...原创 2020-08-07 17:58:26 · 149 阅读 · 0 评论 -
synchronized总结详解
synchronized跟面试官扯了半个小时前言钟馗穿着有些微微泛黄的格子道袍,站在安琪拉对面,开始发难,其中让安琪拉印象非常深刻的是法师的synchronized 钩子。开场面试官: 你先自我介绍一下吧!安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗冷哼)!哦,不对,串场了,我是**,目前在--公司做--系统开发。面试官: 刚才听一面的同事说你们上次聊到了synchronized,你借口说要回去补篮,现在能跟我讲讲了吧?安琪拉: 【上来就丢钩子,都不寒暄几句,问...原创 2020-08-07 17:46:41 · 493 阅读 · 0 评论 -
【死磕Java并发】—–J.U.C之阻塞队列:BlockingQueue总结
【死磕Java并发】—–J.U.C之阻塞队列:BlockingQueue总结经过前面六篇博客的阐述,我想各位应该对阻塞队列BlockingQueue有了较为深入的理解,下面来一个总结,先看整个类图:BlockingQueueBlockingQueue接口实现Queue接口,它支持两个附加操作:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。相对于同一操作他提供了四种机制:抛出异常、返回特殊值、阻塞等待、超时:BlockingQueue常用于生产者和消费者场景。 JDK 8...原创 2020-08-04 08:51:49 · 169 阅读 · 0 评论 -
【死磕Java并发】—–深入分析ThreadLocal
【死磕Java并发】—–深入分析ThreadLocalThreadLoacal是什么?ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢? API是这样介绍它的:This class provides thread-local variables. These ..原创 2020-08-04 08:50:59 · 89 阅读 · 0 评论 -
【死磕Java并发】—–J.U.C之线程池:线程池的基础架构
【死磕Java并发】—–J.U.C之线程池:线程池的基础架构经历了Java内存模型、JUC基础之AQS、CAS、Lock、并发工具类、并发容器、阻塞队列、atomic类后,我们开始JUC的最后一部分:线程池。在这个部分你将了解到下面几个部分:线程池的基础架构 线程池的原理分析 线程池核心类的源码分析 线程池调优Executor我们先看线程池的基础架构图:ExecutorExecutor,任务的执行者,线程池框架中几乎所有类都直接或者间接实现Executor接口,它是线程池框架的基..原创 2020-08-04 08:50:14 · 102 阅读 · 0 评论 -
【死磕Java并发】—–J.U.C之线程池:ThreadPoolExecutor
【死磕Java并发】—–J.U.C之线程池:ThreadPoolExecutor作为Executor框架中最核心的类,ThreadPoolExecutor代表着鼎鼎大名的线程池,它给了我们足够的理由来弄清楚它。下面我们就通过源码来一步一步弄清楚它。内部状态线程有五种状态:新建,就绪,运行,阻塞,死亡,线程池同样有五种状态:Running, SHUTDOWN, STOP, TIDYING, TERMINATED。 private final AtomicInteger ...原创 2020-08-04 08:46:53 · 124 阅读 · 0 评论 -
【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutor
【死磕Java并发】—–J.U.C之线程池:ScheduledThreadPoolExecutorScheduledThreadPoolExecutor解析我们知道Timer与TimerTask虽然可以实现线程的周期和延迟调度,但是Timer与TimerTask存在一些缺陷,所以对于这种定期、周期执行任务的调度策略,我们一般都是推荐ScheduledThreadPoolExecutor来实现。下面就深入分析ScheduledThreadPoolExecutor是如何来实现线程的周期、延迟...原创 2020-08-04 08:46:01 · 183 阅读 · 0 评论 -
【死磕Java并发】—–分析 ArrayBlockingQueue 构造函数加锁问题
【死磕Java并发】—–分析 ArrayBlockingQueue 构造函数加锁问题昨天有位小伙伴问我一个 ArrayBlockingQueue 中的一个构造函数为何需要加锁,其实这个问题我还真没有注意过。主要是在看 ArrayBlockingQueue 源码时,觉得它很简单,不就是通过加锁的方式来操作一个数组 items 么,有什么难的,所以就没有关注这个问题,所以它一问我懵逼了。回家细想了下,所以产生这篇博客。我们先看构造方法: public ArrayBlockingQue...原创 2020-08-04 08:44:05 · 214 阅读 · 0 评论 -
【死磕 Java 并发】—– synchronized 的锁膨胀过程
【死磕 Java 并发】—– synchronized 的锁膨胀过程synchronized 是 Java 面试的常客,我们需要掌握它的基本使用,比如同步代码块、同步普通方法、同步静态方法,以及他们的区别,当然这是最初级的。高级点的就是需要掌握 synchronized 的实现原理,比如对象头、synchronized 的锁优化、锁的膨胀过程,这篇文章就是介绍 synchronized 的锁膨胀过程。该过程其实很多小伙伴都不知道,18年面试的时候问了不下于 20 个人,没有一个回答比较好的,...原创 2020-08-04 08:43:03 · 653 阅读 · 3 评论