首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
少年起而行之
掘友等级
java开发工程师
|
PPWANG
一个只会摸鱼的程序员
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
38
文章 37
沸点 1
赞
38
返回
|
搜索文章
最新
热门
AQS(AbstractQueuedSynchronizer)的实现原理
前一篇文章讲了一下AQS是什么以及AQS可重写的方法、提供的模板方法,本篇就从以下几点来写一下同步器的实现原理。 同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构建为一个节点(Node)并将…
项目中有用过锁吗?能解释一下什么是AQS(AbstractQueuedSynchronizer)吗?
锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,如读写锁)。在以前,Java程序是靠synchronized来实现锁功能的,而在Java SE 5之后,并发包中新增了Lock接口(以及相关实现…
Redis分布式锁的实现以及原理
在程序中,我们想要保证一个变量的可见性及原子性,我们可以用volatile(对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性)、synchronized、乐观锁、悲观锁等等来控制。单体应用内可以这样做,而现在随着时代的发展,…
Java内存模型综述
顺序一致性内存模型是一个理论参考模型,JAVA内存模型和处理器在设计时通常会以顺序一致性内存模型作为参考。在设计时,JAVA内存模型和处理器内存模型会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性来实现处理器和JAVA内存模型,那么很多处理器和编译器优化都要被禁止,这对…
双重检查锁定与延迟初始化
在多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双重检查锁定是常见的延迟初始化技术,但它是一个错误的用法,至于为什么,往下看就好。 在JAVA程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象的时候进行初始化。此时,程序员可能会…
Java内存模型中的同步原语(volatile、synchronized、final)
如上面程序所示,一个volatile变量的单个读/写操作,与一个普通变量的读/写操作都是使用同一个锁来同步,他们之间的执行效果相同。 锁的happends-before规则保证释放锁和获取锁的两个线程之间的内存可见性,这意味着对一个volatile变量的读,总是能看到(任意线程…
Java内存模型中的happens-before
1、程序员对内存模型的使用,程序员希望内存模型易于理解、易于编程。程序员希望基于一强内存模型来编写代码。 2、编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对他们的束缚越少越好,这样它们就能做尽可能多的优化来提高性能。编译器和处理器希望实现一个弱内存模型。 上面这两…
Java内存模型中的顺序一致性
重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下面这三种类型: 对于这三种情况,只要重排序两个操作的执行顺序,那么程序的执行结果就会被改变。编…
Java内存模型的基础
通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间通信机制有两种:共享内存和消息传递。 共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。 消息传递:线程之间没有公共状态,线程之间必须通过发送消息来显式的进行通信。 Java的并发采用的是…
MYSQL相关内容(引擎、隔离级别、实现原理)
存储引擎是MySQL有别于其他数据库管理系统的最大特色,我们知道关系型数据库的数据是存在表里的,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式,每个表格就是一个数据,表是在存储数据的同时,还要组织数据的存储结构,而这些数据的组织结构就是由存储引擎决定的,即存…
下一页
个人成就
文章被点赞
195
文章被阅读
48,894
掘力值
1,528
关注了
8
关注者
89
收藏集
0
关注标签
16
加入于
2019-11-25