上篇文章记录到volatile在硬件层面怎么保证线程间可见性的,是通过lock锁缓存行缓存一致性协议来实现的。但是这样会有一个伪共享的问题。 首先缓存行在64bit机中一般为64字节,具体缓存行大小可以通过下面的命令查看: cat /proc/cpuinfo 假设有一个对象有两个long类型的数据x ...
分类:
编程语言 时间:
2021-04-02 13:27:35
阅读次数:
0
@PostConstruct注解的方法在项目启动的时候执行这个方法,也就是在spring容器启动的时候执行,可以加载一些需要提前启动需要或者 @Component public class LogUtil { private static volatile LogUtil instance; @Au ...
分类:
其他好文 时间:
2021-03-26 15:19:40
阅读次数:
0
###1.volatile是Java虚拟机提供的轻量级同步机制 1.1保证可见性(一个线程对主内存中变量的修改,其他线程会马上收到通知) 1.2不保证原子性 1.3禁止指令重排 ###2.JMM(Java Memory Model)(Java内存模型) JMM本身是一种抽象的概念并不真实存在,它描述 ...
分类:
其他好文 时间:
2021-03-18 14:39:46
阅读次数:
0
实现原理 AQS(AbstractQueuedSynchronizer),抽象的队列式同步器 AQS 维护了一个 state(共享资源变量)和一个 FIFO 线程等待队列(CLH 队列),多个线程竞争 state 被阻塞时就会进入此队列中。 State state 使用 volatile 修饰的一个 ...
分类:
编程语言 时间:
2021-03-17 15:06:57
阅读次数:
0
public class HttpServerStart { public static volatile boolean flag = false ; public static void start() { int port = 8099; EventLoopGroup bossGroup = ...
分类:
Web程序 时间:
2021-03-10 12:59:52
阅读次数:
0
ANSI C类型限定符 我们通常使用类型和储存类别来修饰C中的变量,在标准之中还有这样一些特殊的限定符可以帮助我们更好的修饰C中的变量,它们包括const、volatile、restrict、_Atomic。下面来分别详述它们的用处。 1. const:恒常性修饰符 使用const修饰符修饰的变量不 ...
分类:
其他好文 时间:
2021-03-06 14:47:51
阅读次数:
0
已经被赋予含义的英文字符,其全部小写并在编写时会高亮显示! 类别关键字说明 访问控制 private 私有的 protected 受保护的 public 公共的 default 默认 类、方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充,继承 final 最终值,不 ...
分类:
编程语言 时间:
2021-03-03 12:24:33
阅读次数:
0
volatile的作用及原理 当一个变量被volatile修饰时,会拥有两个特性: 保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改). 禁止了指令重排序. 1. 保证内存可见性 JMM操作变量的时候不是直接在主存进行操作的,而是每个线程拥有自 ...
分类:
编程语言 时间:
2021-02-18 13:42:21
阅读次数:
0
ReentrantLock源码 父子类关系:NonfairSync->Sync->AQS AQS源码 核心是volatile int state以及等待队列。 state的具体含义交给子类来定义。 ReentrantLock中state代表加解锁。 CountDownLatch中state代表需要c ...
分类:
编程语言 时间:
2021-02-17 14:21:25
阅读次数:
0
关键字 const 和 volatile 规定了指针的处理方式: const 规定指针在初始化后是受保护的,不能够再修改。 volatile 规定了变量的值能够被用户应用程序外部的操作所修改。 因此,关键字 volatile 可以声明共享内存中的对象来和中断服务例程进行通信。共享内存可以被多个进程或 ...
分类:
其他好文 时间:
2021-02-10 13:42:48
阅读次数:
0