并发编程
齐梦星空
专注
展开
-
事实也许和你想的不一样:volatile,原子类,synchronized在scala的Thread,线程池,Future中使用对比
在scala和java中通常用于数据同步的材料有volatile关键字,原子类,synchronized关键字。但是在不同的多线程环境下,产生的效果却并不相同。 实验 在独立线程环境下使用volatile关键字,原子类,synchronized关键字 构造1000个独立的Thread实例同时启动 // 不使用任何同步机制 var i: Int = 0 (0 to 10000) foreach (_ => new Thread() { i = i + 1 }.原创 2020-06-21 11:19:11 · 851 阅读 · 2 评论 -
HashMap和CHM的四种遍历方式
方法一:在for-each循环中使用entries来遍历 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } 方法二:在for-each循环中遍历ke...原创 2020-03-27 15:01:46 · 305 阅读 · 0 评论 -
串一串java的voliate,cas,原子类
cpu是如何使用内存的 在将下面的voliate之前就不得不谈一谈cpu和们的主存之间的关系。CPU的运算处理速度与内存读写速度的差异非常巨大,为了解决这种差异充分利用CPU的使用效率,就开始在CPU处理器和内存之间加了一层缓冲区。 注意:所以所谓的本地内存,主内存都是抽象概念,并不一定就真实的对应cpu缓存和物理内存。当然如果是出于理解的目的,这样对应起来也无不可。 但是高速缓存在解决cpu的...原创 2020-03-27 11:57:12 · 531 阅读 · 0 评论 -
为什么说java的synchronized 锁定代码块和synchronized锁定类对象都指的类对象?
锁定代码块等价于锁定对象 首选看一下锁定代码块的语法? synchronized (对象) { // 代码块 } 上面的语法中的"对象",指的是实例对象,可以是this,Class.clss或者其他共享对象.所以代码块锁定的等价于对象锁定.我们甚至还可以假设一下.把上面代码的"对象"做成变量: public void func1(Object lo...原创 2020-03-04 11:05:23 · 603 阅读 · 0 评论