摘要:
什么是ThreadLocal? ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 测试代码: package com.javaBase.LineDistance; /** * 〈一句话功能简述〉; * 〈功能详 阅读全文
摘要:
注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高 阅读全文
摘要:
hotspot x86平台上的内存屏障的实现依赖于lock指令,而Intel的lock指令的实现依赖于缓存一致性协议(例如MESI)。 本文只介绍hotspot X86平台的内存屏障的实现,没有任何关于其他平台是怎么实现内存屏障的内容。 一、字节码解释器源码分析验证hotspot字节码解释器在处理p 阅读全文
摘要:
首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。 所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。 而 Thread.interrupt 的作用其实也不是中断线程,而是「通知线程应该中断了」, 具体到底中断还是继 阅读全文
摘要:
为什么会有happens-before 规则? 因为jvm会对代码进行编译优化,指令会出现重排序的情况,为了避免编译优化对并发编程安全性的影响,需要happens-before规则定义一些禁止编译优化的场景,保证并发编程的正确性。 主要解决多线程的可见性和排序性,解决不了原子性 public cla 阅读全文
摘要:
Collection<E>是Java集合框架中的基本接口; Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作或返回集合的静态方法。 1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 阅读全文
摘要:
package java.util; public interface Enumeration<E> { boolean hasMoreElements(); E nextElement(); } public interface Iterator<E> { boolean hasNext(); E 阅读全文
摘要:
我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。 但是在使用的时候也是有不同的。List和Set都有iterator()来取得其迭代器。对List来说,你也可以 阅读全文
摘要:
HashSet是最常用的Set集合之一,可以保证元素的唯一性。 底层原理 HashSet底层完全就是在HashMap的基础上包了一层,只不过存储的时候value是默认存储了一个Object的静态常量,取的时候也是只返回key,所以看起来就像List一样。 构造方法 可以看到四个构造方法都是初始化一个 阅读全文
摘要:
本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识。happens-before相关内容参见:JLS §17.4.5. Happens-before Order、深入理解Java内存模型以及Happens b 阅读全文