E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
java并发编程jmm
JAVA并发编程
——Java对象内存布局和对象头
1.对象在堆内存中布局2.对象的对象头3.对象的实例数据4.对象的对齐填充5.看看Object的对象头6.看看自定义对象的对象头7.总结1.对象在堆内存中布局当我们写入这样一行代码Objectobject=newObject();的时候,我们都知道它会在我们的JVM堆->新生区->伊甸园区新建一个对象,但是我们可能只是知道这个对象在哪儿,但是对这个对象的内存结构却知之甚少,今天我们就来细说一下,J
·
2022-01-08 12:12
java对象布局
Java并发编程
——ReentrantLock—Condition原理
一、前言Jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。使用synchronized结合Object上的wait和notify方法可以实现线程间的等待通知
小波同学
·
2022-01-05 17:38
Java并发编程
——ReentrantLock实现原理
一、前言ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。CAS:CompareandSwap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe
小波同学
·
2022-01-04 19:22
Java并发编程
——volatile原理
前言Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问volatile变量时不会执行
小波同学
·
2022-01-04 17:51
JAVA并发编程
——ThreadLocal的介绍、使用及源码分析
1.ThreadLocal是什么2.ThreadLocal能干什么3.ThreadLocal在生产中的应用4.ThreadLocal源码分析5.ThreadLocal内存泄露问题6.总结1.ThreadLocal是什么在开始了解ThreadLocal是什么之前,我们可以在java里搜一下这个类,看一下源码的注释:意思大概就是:ThreadLocal提供了线程私有的局部变量,这些变量不同于普通变量,
·
2022-01-04 17:56
JAVA并发编程
——AbstractQueuedSynchronizer之AQS概念和源码阅读
1.AQS是什么2.能干什么3.AQS为什么是JUC内容中最重要的基石4.AQS内部体系架构5.从我们的ReentrantLock开始解读AQS6.总结1.AQS是什么AQS————全称AbstractQueuedSynchronizer,抽象队列同步器。我们可以看一下源码中的解释:意思就是说,它是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC的基石,通过内置的FIFO队列来完成资源获取
·
2021-12-29 17:14
java并发编程aqs
JAVA并发编程
——线程中断机制与interrupt()
1.线程中断是什么2.中断的相关API方法3.通过一个volatile变量实现线程中断4.通过Thread类自带的中断api方法实现5.当前线程的中断标识为true,是不是就立刻停止?6.静态方法Thread.interrupted()介绍7.总结1.线程中断是什么我们都知道,JAVA启动一个线程很容易,而且我们都是通过线程结束之后才停止,但是我们会不会有这样一种情况,那就是线程在运行到一半的时候
·
2021-12-27 14:51
java多线程中断
JAVA并发编程
——生产者与消费者模式(传统版&阻塞队列版)
1.前言2.生产者与消费者模型传统版代码示例3.生产者与消费者模型阻塞队列版代码示例1.前言今天我们要用两种方式来实现生产者和消费者模式,我们要先介绍一个概念,生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而是通过消息队列进行通讯,所以生产者生产完数据后不用等待消费者处理,而是直接扔给队列,消费者不找生产者要数据,而是直接从队列里取数据,队列相
·
2021-12-26 12:22
java多线程设计模式
JAVA并发编程
——Synchronized与Lock的区别以及Lock的使用
1.Synchronized与Lock的区别2.Condition的基础概念3.使用Condition循环顺序打印ABC1.Synchronized与Lock的区别我们可能对于Condition类都比较陌生,所以我们从我们比较熟悉的Synchronized开始对比着学习。我们都知道Synchronized都有下图这三个使用方法:首先是我们已知的最熟练的synchronized关键字,他是保证线程同
·
2021-12-26 12:22
JAVA并发编程
——线程等待唤醒机制与LockSupport
方法实现线程的等待和唤醒4.Object和Condition使用的限制条件5.LockSupport类简介6.LockSupport类中的park等待和unpark唤醒7.总结1.线程等待唤醒机制概述通过前面两篇博客:
JAVA
·
2021-12-26 12:22
javajuc并发编程lock
JAVA并发编程
——从字节码角度分析synchronized实现
1.idea查看字节码jclasslib插件安装2.从字节码角度分析synchronized实现3.总结1.idea查看字节码jclasslib插件安装synchronize这个关键字我们肯定已经不陌生了,接下来我们从字节码这个角度来进行剖析一下,它为什么会有加锁的效果。我们先安装一下jclasslib插件,方便我们查看java的字节码。点击view-->showBytecodeWithJclas
·
2021-12-26 12:50
说一下对volatile的理解
Java内存模型/
JMM
(JavaMemoryModel)Java内存模型(JSR-133)屏蔽了硬件、操作系统的差异,实现让Java程序在各种平台下都能达到一致的并发效果,规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值
越努力越幸运阳
·
2021-12-24 11:52
Java并发编程
深入理解之Synchronized的使用及底层原理详解 下
synchronized锁优化1、自旋锁与自适应自旋2、锁消除逃逸分析:3、锁粗化二、对象头内存布局三、synchronized锁的膨胀升级过程1、偏向锁2、轻量级锁3、重量级锁4、各种锁的优缺点接着上文《
Java
·
2021-12-22 13:48
JAVA并发编程
——CompletableFuture的方法介绍和使用
1.CompletableFuture的方法简介和使用2.总结1.CompletableFuture的方法简介和使用从上面那篇博客
JAVA并发编程
——Future和CompletableFuture的简介与使用我们对
·
2021-12-22 10:39
JAVA并发编程
——Callable接口和FutureTask简介和使用
1.Callable接口简介2.FutureTask类简介3.Callable接口使用1.Callable接口简介在介绍Callable接口之前,我们先回顾一下我们很熟悉的Runnable接口:我们想要使用线程的时候,很多时候都是先实现Runnable接口,然后重写run方法,如下所示:publicclassRunnableDemoimplementsRunnable{@Overridepubli
·
2021-12-21 15:14
java多线程
JAVA并发编程
——Future和CompletableFuture的简介与使用
1.Future类简介2.Future类的使用3.CompletableFuture类的简介4.CompletableFuture类的的使用5.总结1.Future类简介我们之前在这篇文章
JAVA并发编程
·
2021-12-21 15:33
Java并发编程
——LinkedBlockingDeque
一、阻塞队列BlockingQueue在java.util.concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。1.1、BlockingQueue的基本原理先来解释一下阻塞队列:如上图:1、生产线程1往阻塞队列里面添加新的数据,当阻塞队列满的时候(针对有界队列),
小波同学
·
2021-12-19 01:13
Java并发编程
——CyclicBarrier
一、CyclicBarrier循环栅栏CyclicBarrier是java.util.concurrent包下面的一个工具类,字面意思是可循环使用(Cyclic)的屏障(Barrier),通过它可以实现让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,所有被屏障拦截的线程才会继续执行。CyclicBarrier循环栅栏和CountDownLatch很类似,都能阻塞一组线
小波同学
·
2021-12-12 15:04
看看我给面试官是如何娓娓道来synchronized锁升级过程的
Java并发编程
Day8本篇总结的是如何在Java中避免创建不必要的对象,后续会每日更新~关于《我们一起学Redis》、《我们一起学HarmonyOS》等知识点可以查看我的往期博客相信自己,越活越坚强,
李子捌
·
2021-12-06 09:09
《并发编程》系列
java
后端
并发编程
并发
深入理解Java并发内存模型
Java内存模型是什么Java内存模型翻译自JavaMemoryModel,也称Java多线程内存模型,简称:
JMM
,它是为了解决Java多线程并发、CPU高速缓存等内容而引入的一套规则,这里需要注意不要将它与
有没有口罩给我一个
·
2021-12-03 10:02
java多线程Synchronized实现可见性原理解析
线程修改后的共享变量值能够及时从工作内存刷新到主内存中其他线程能够及时把共享变量的最新值从主内存更新到自己的工作内存中Java语言层面支持的可见性的实现方式synchronizedvolatilesynchronized实现可见性synchronized能够实现:原子性(同步)可见性
JMM
·
2021-12-02 17:06
java并发编程
(三)java线程状态与方法
一、线程的状态1.1操作系统层面在操作系统层面有五种状态:操作系统层面的线程状态.png【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由CPU调度执行【运行状态】指获取了CPU时间片运行中的状态。当CPU时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换【阻塞状态】如果调用了阻塞API,
我犟不过你
·
2021-11-30 16:45
JVM_06 内存模型(
JMM
)篇
Java内存模型(
JMM
)
JMM
即为JavaMemoryModel,他定义了主存(多个线程所共享的空间、例:成员变量)、工作内存(线程的私有空间,例:局部变量)的抽象概念,对应着底层的CPU寄存器、缓存
爪洼ing
·
2021-11-30 15:07
常用设计模式与JVM
jvm
jvm.gc
java
Java并发编程
的艺术 -- 线程池和Executor框架(第九、十章)
文章目录1、线程池1.1、为什么使用线程池?1.2、线程池的实现原理1.3、excute()方法源码分析1.4、工作线程1.5、线程池的创建1.6、execute()和submit()方法1.7、关闭线程池2、Executor框架2.1、Executor框架简介2.1.1、Executor框架的两级调度模型2.1.2、Executor框架的结构2.1.3、Executor框架的使用2.1.4、Ex
崇尚学技术的科班人
·
2021-11-30 14:35
JUC
java
开发语言
后端
Java并发编程
的艺术 -- 原子操作类和并发工具类(第七、八章)
文章目录1、原子操作类1.1、原子更新基本类型1.1.1、原子更新基本类型常用类1.1.2、AtomicInteger的常用方法1.1.3、AtomicInteger的使用1.1.4、getAndIncrement是如何实现原子操作的呢?1.1.5、AtomicInteger类的原理1.2、原子更新数组1.2.1、原子更新数组常用类1.2.2、AtomicIntegerArray的使用1.3、原子
崇尚学技术的科班人
·
2021-11-29 09:14
JUC
java
开发语言
后端
一起来看看什么是
JMM
模型
一起来看看什么是
JMM
模型
JMM
(JavaMemoryModel)是java内存模型,是一种规范、规则,一种抽象的概念。
AmbitionsZoe
·
2021-11-25 15:27
mysql
sql
数据库
Java并发编程
之ConcurrentLinkedQueue源码详解
目录一、ConcurrentLinkedQueue介绍二、构造方法三、入队四、出队五、总结一、ConcurrentLinkedQueue介绍并编程中,一般需要用到安全的队列,如果要自己实现安全队列,可以使用2种方式:方式1:加锁,这种实现方式就是我们常说的阻塞队列。方式2:使用循环CAS算法实现,这种方式实现队列称之为非阻塞队列。从点到面,下面我们来看下非阻塞队列经典实现类:ConcurrentL
·
2021-11-24 15:48
阿里 2021 版最全 Java 并发编程笔记,看完我才懂了“内卷”的真正意义
操作系统并发支持进程管理内存管理文件系统IO系统进程间通信网络通信阻塞队列数组有界队列链表无界队列优先级有限无界队列延时无界队列同步队列LBQ队列Java内存模型线程通信机制内存共享消息传递
JMM
内存模型顺序一致性指令重排序
Ma Daniel
·
2021-11-24 15:57
java
java-ee
jar
程序人生
职场和发展
并发编程之Java内存模型锁的内存语义
1、锁的释放-获取建立的happens-before关系锁是
Java并发编程
中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。锁释放-获
·
2021-11-22 17:53
Java并发编程
之Java内存模型
目录1、什么是Java的内存模型2、为什么需要Java内存模型3、Java内存模型及操作规范4、Java内存模型规定的原子操作5、Java内存模型同步协议6、Java内存模型的HB法则
JMM
的HB法则总结
·
2021-11-22 17:50
详解
Java并发编程
之volatile关键字
目录1、volatile是什么?2、并发编程的三大特性3、什么是指令重排序?4、volatile有什么作用?5、volatile可以保证原子性?6、volatile和synchronized对比总结1、volatile是什么?首先简单说一下,volatile是什么?volatile是Java中的一个关键字,也是一种同步机制。volatile为了保证变量的可见性,通过volatile修饰的变量具有共
·
2021-11-22 17:49
Java并发编程
系列之LockSupport的用法
目录1、什么是LockSupport?2、两类基本API3、LockSupport本质4、LockSupport例子5、LockSupport源码总结1、什么是LockSupport?LockSupport是用于创建锁和其他同步类的基本线程阻塞原语2、两类基本APILockSupport提供了两类最基本的API:block线程类:一般都是以pack开头的方法名,pack*(...)pack方法有两
·
2021-11-22 17:18
Java 虚拟机详解
一、Java内存模型(
JMM
)堆(线程共享)Java程序中通过创建出来的对象存放在堆内存中,其成员变量和数据存放在对象的内部,堆内存中的对象不可以共享,空间不是连续的。
潜心之力
·
2021-11-22 11:20
深入理解Java虚拟机 --
JMM
(Java内存模型)
1.1、CPU和缓存一致性1.2、处理器优化和指令重排1.3、并发编程带来的问题1.4、
JMM
诞生的原因2、Java内存模型2.1、
JMM
对内存的划分2.2、完成主内存和工作内存交互的操作2.3、线程间的通信机制
崇尚学技术的科班人
·
2021-11-18 22:50
JVM
java
开发语言
后端
Java并发编程
——线程池详解
背景在执行一个异步任务或并发任务时,往往是通过直接newThread()方法来创建新的线程,这样做弊端较多。经常创建和销毁线程,对性能的影响很大(上下文切换)更好的解决方案是合理地利用线程池,线程池的优势很明显,如下:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行;方便线程并发数的管控,线程若是无限制的创建,
憨憨龟.
·
2021-11-14 22:25
并发编程
java
后端
并发编程
Java并发编程
——ConcurrentHashMap详解
引出场景:针对用户来做一个访问次数的记录。通过HashMap进行记录,key为用户名,value为访问次数。publicclassConcurrentHashMapDemo{privatestaticfinalHashMapUSER_ACCESS_COUNT=newHashMapUSER_ACCESS_COUNT=newConcurrentHashMap1);System.out.println(
憨憨龟.
·
2021-11-14 15:44
并发编程
java
后端
并发编程
双十一预发布 , 阿里 2021 版最全 Java 并发编程笔记
操作系统并发支持进程管理内存管理文件系统IO系统进程间通信网络通信阻塞队列数组有界队列链表无界队列优先级有限无界队列延时无界队列同步队列LBQ队列Java内存模型线程通信机制内存共享消息传递
JMM
内存模型顺序一致性指令重排序
乔一方
·
2021-11-10 20:54
java
面试
程序人生
并发编程终章:
Java并发编程
系列总纲
并发编程目录磕磕绊绊近半年时间,在工作之余,前后一共写了十三篇深入
Java并发编程
系列的文章,由于内容颇多,所以在这里列一个目录方便诸位翻阅。
竹子爱熊猫
·
2021-11-07 00:00
多线程
高并发编程
后端
java并发编程
之原子性、可见性、有序性
目录1原子性1.1java中的原子性操作2可见性2.1可见性问题2.2解决可见性问题3有序性3.1单个线程内程序的指令重排序3.2多线程内程序的指令重排序3.3保证有序性的解决方法3.4volatile保证有序性的原理4实例分析4.1原理分析4.2synchronized结合4.3Lock结合4.4使用AtomicInteger替换int在java中,执行下面这个语句inti=12;执行线程必须先
·
2021-11-05 17:48
Java并发编程
之内存模型
目录一、Java内存模型的基础1.1并发编程模型的两个关键问题1.2Java内存模型的抽象结构1.3从源代码到指令重排序1.4写缓冲区和内存屏障1.4.1写缓冲区1.4.2内存屏障1.5happens-before简介简介:Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,这一系列几篇文章将揭开Java内存模型的神秘面纱。这一系列的文章大致分4个部分,分别是:Java
·
2021-11-04 10:56
java 多线程与并发之volatile详解分析
目录CPU、内存、缓存的关系CPU缓存什么是CPU缓存为什么要有多级CPUCacheJava内存模型(JavaMemoryModel,
JMM
)
JMM
导致的并发安全问题可见性原子性有序性volatilevolatile
·
2021-11-04 10:55
并发编程之Java内存模型顺序一致性
目录1、数据竞争和顺序一致性1.1Java内存模型规范对数据竞争的定义1.2
JMM
对多线程程序的内存一致性做的保证2、顺序一致性内存模型2.1特性2.2举例说明顺序一致性模型2.3同步程序的顺序一致性效果
·
2021-11-04 10:21
95后架构师晒出工资单:狠补了这个,真香...
这份资料内容涵盖极广,包含了22个技术栈、内容涵盖互联网公司面试常问的一些问题:Java相关(基础&进阶篇、字符串&集合面试题汇总)
Java并发编程
JVM面试题数据结构与算法网络协议面试题数据库M
CSDN云计算
·
2021-11-03 18:15
算法
java
面试
编程语言
数据库
并发编程学习笔记 二 park/unpark
并发编程学习笔记二park/unpark原理java线程状态之间的相互转换死锁活锁饥饿ReentrantLock可重入锁
JMM
volatile的原理乐观锁CAS享元模式线程池park/unpark原理每个线程都有自己的一个
Ghost1590
·
2021-10-30 20:16
java
java
开发语言
后端
Java并发编程
之Volatile变量详解分析
目录一、volatile变量的特性1.1、保证可见性,不保证原子性1.2、禁止指令重排二、内存屏障三、happens-beforeVolatile关键字是Java提供的一种轻量级的同步机制。Java语言包含两种内在的同步机制:同步块(或方法)和volatile变量,相比synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调
·
2021-10-29 12:25
Java并发编程
面试之线程池
目录什么是线程池线程池好处线程池的执行流程怎么用线程池corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueuethreadFactoryejectedExecutionHandler线程池参数如何设置?监控线程池总结什么是线程池是一种基于池化思想管理线程的工具。池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需。比如我们的对象池,数
·
2021-10-29 10:13
Java并发编程
之死锁相关知识整理
目录一、什么是死锁二、死锁产生的条件三、死锁产生的演示四、死锁的预防五、死锁的避免一、什么是死锁所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进二、死锁产生的条件以下将介绍死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁互斥条件进程要求对所分配的资源(如打印机〉进行排他性控制,即在一段时间内某资源仅为一个
·
2021-10-29 10:12
Java并发编程
加锁导致的活跃性问题详解方案
目录死锁(Deadlock)死锁的解决和预防1.超时释放锁2.按顺序加锁3.死锁检测活锁(Livelock)避免活锁饥饿解决饥饿性能问题上下文切换什么是上下文切换?减少上下文切换的方法资源限制什么是资源限制资源限制引发的问题如何解决资源限制的问题我们主要处理锁带来的问题.首先就是最出名的死锁死锁(Deadlock)什么是死锁死锁是当线程进入无限期等待状态时发生的情况,因为所请求的锁被另一个线程持有
·
2021-10-29 10:36
分析
Java并发编程
之信号量Semaphore
目录一、认识Semaphore1.1、Semaphore的使用场景1.2、Semaphore使用1.3、Semaphore信号量的模型二、Semaphore深入理解2.1、Semaphore基本属性2.2、Semaphore的公平性和非公平性2.3、其他Semaphore方法一、认识Semaphore1.1、Semaphore的使用场景Semaphore的使用场景主要用于流量控制,比如数据库连接,
·
2021-10-28 10:54
巩固剖析并发基础:并发三大特性详解 & 代码实例分析可见性问题 & 深入了解
JMM
模型
文章目录一、并发和并行二、并发三大特性2.1可见性2.2有序性2.3原子性三、Java内存模型(
JMM
)3.1
JMM
定义3.2
JMM
与硬件内存架构的关系3.3内存交互操作3.3
JMM
的内存可见性保证四、
沮丧的南瓜
·
2021-10-28 08:10
#
[TL-5]并发编程专题
java
开发语言
后端
上一页
38
39
40
41
42
43
44
45
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他