说一下 synchronized 底层实现原理? synchronized可以保证方法或者代码块在运行时, 同一时刻只有一个方法可以进入到临界区, 同时它还可以保证共享变量的内存可见性。 Java中每一个对象都可以作为锁, 这是synchronized实现同步的基础: 普通同步方法,锁是当前实例对象 ...
分类:
其他好文 时间:
2021-04-06 14:26:19
阅读次数:
0
上篇文章记录到volatile在硬件层面怎么保证线程间可见性的,是通过lock锁缓存行缓存一致性协议来实现的。但是这样会有一个伪共享的问题。 首先缓存行在64bit机中一般为64字节,具体缓存行大小可以通过下面的命令查看: cat /proc/cpuinfo 假设有一个对象有两个long类型的数据x ...
分类:
编程语言 时间:
2021-04-02 13:27:35
阅读次数:
0
###1.volatile是Java虚拟机提供的轻量级同步机制 1.1保证可见性(一个线程对主内存中变量的修改,其他线程会马上收到通知) 1.2不保证原子性 1.3禁止指令重排 ###2.JMM(Java Memory Model)(Java内存模型) JMM本身是一种抽象的概念并不真实存在,它描述 ...
分类:
其他好文 时间:
2021-03-18 14:39:46
阅读次数:
0
1.结合你之前的工程经验以及任正非致员工信,谈谈你对软件工程的看法。 (1)软件工程应把网络安全和隐私保护作为公司的最高纲领,把可信作为第一优先级,放在功能、特性和进度之上。 (2)代码是软件的基础,应遵从架构与设计原则并能熟练使用各种编程库和API,编写出简洁、规范、可读性强、健壮安全的代码。 ( ...
分类:
其他好文 时间:
2021-03-15 10:41:41
阅读次数:
0
volatile的作用及原理 当一个变量被volatile修饰时,会拥有两个特性: 保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改). 禁止了指令重排序. 1. 保证内存可见性 JMM操作变量的时候不是直接在主存进行操作的,而是每个线程拥有自 ...
分类:
编程语言 时间:
2021-02-18 13:42:21
阅读次数:
0
1.原子性(Atomicity) 定义:不可再分割的操作 Java内存模型直接保证原子性变量操作包括:read、load、assign、use、store 和 write 这6个 2.可见性(Visibility) 定义:是指当一个线程修改了一个共享变量的值时,其他线程能够立即的指这个修改 java ...
分类:
其他好文 时间:
2021-02-18 13:27:59
阅读次数:
0
get和post的区别主要有以下几方面: 常规 区别: 1、url可见性: get,参数url可见; post,url参数不可见 2、数据传输上: get,通过拼接url进行传递参数; post,通过body体传输参数 3、缓存性: get请求是可以缓存的 post请求不可以缓存 4、后退页面的反应 ...
分类:
其他好文 时间:
2021-02-08 11:43:20
阅读次数:
0
一.可见性 在下面代码中,主线程和读线程都将访问共享变量ready和number。主线程启动读线程,然后将number 设为42,并将ready设为true。读线程一直循环直到发现ready的值变为true,然后输出number 的值。虽然NoVisibility 看起来会输出42,但事实上很可能输 ...
分类:
其他好文 时间:
2021-01-08 11:44:40
阅读次数:
0
JMM在X86下的原理与实现 Java的happen-before模型 众所周知 Java有一个happen-before模型,可以帮助程序员隔离各个平台多线程并发的复杂性,只要Java程序员遵守happen-before模型就不用担心多线程内存排序或者缓存可见性的问题 摘自周志明老师的JMM章节 ...
分类:
其他好文 时间:
2021-01-07 12:39:39
阅读次数:
0
volatile 1.volatile保证可见性 代码比较简单,我就不贴出来了。 子线程t从主内存读取到数据放入其对应的工作内存 将flag的值更改为true,但是这个时候flag的值还没有写会主内存 此时main方法main方法读取到了flag的值为false 当子线程t将flag的值写回去后,失 ...
分类:
其他好文 时间:
2021-01-04 11:03:30
阅读次数:
0