随笔分类 - Java
关于Java的一切
摘要:阻塞队列是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法: 1) 支持阻塞的插入方法:当队列满时,队列会阻塞执行插入的线程 2) 支持阻塞的移除方法:当队列空时,队列会阻塞执行移除的线程 方法总结: | 方法/处理方式 | 抛出异常 | 返回特殊值 | 一直阻塞 | 超时退出
阅读全文
摘要:在Java里,有时候需要延迟初始化来降低初始化类和创建对象的开销。为众人所致的双重检查锁定是常见的延迟初始化技术,但它是一个错误的用法。 比如下面的用法: 假设线程A执行getInstance()初始化对象还未完成时,线程B 判断 instance 变量为 null,也执行一遍Instance的初始
阅读全文
摘要:线程池的优点: 降低资源开销:每次任务到达时不需要重新创建和销毁 提高可管理性:统一对线程进行调优、监控 提高任务响应速度:不需要等待线程创建 线程池创建的各个参数: corePoolSize: 核心线程数。在核心线程数未满时,也优先创建满核心线程数(就算有空余的核心线程) maximumPoolS
阅读全文
摘要:线程池核心Executor Java的线程既是工作单元,也是执行机制。从JDK5开始,把工作单元与执行机制分离开来。工作单元包括Runnable、Callable,而执行机制由Executor提供。 Executor框架结构和流程 主要由以下三部分组成: 任务:Runnable、Callable接口
阅读全文
摘要:CountDownLatch 该类主要实现了:让一个线程等待其他线程完成后再执行的功能,好比 。 该类的初始化需要一个整数值count,当每次调用 时Count会递减。直到count降到0时,所有执行 的方法都会返回。 初始化了一个共享变量latch,并赋予count为3 创建一个任务,睡眠1秒假装
阅读全文
摘要:本章是在学习内存模型后,对 Volatile 关键字 有了更加全面得理解,对知识点进行一个分析总结。 volatile的特性 volatile在单个操作上和synchronized一样 可见性:volatile字段的写操作保证对所有线程可见 原子性:volatile字段的单个读写操作是原子性的(比如
阅读全文
摘要:synchrnoized的happens before 假设线程A执行init(),线程B执行doTask(),有如下的happens before关系: 根据程序次序规则: ① hb ② ② hb ③ ③ hb ④ ⑤ hb ⑥ ⑥ hb ⑦ ⑦ hb ⑧ 根据监视器规则: ① hb ④ ④ hb
阅读全文
摘要:在学习锁优化时, 对象头(Mark Word) 是必不可缺的一环,因为 synchronized 用的锁是存在 对象头 里的。32位的虚拟机上对象头占64位(8字节),64位的虚拟机上对象头占128位(16字节)[^objectHead];而不同的类型,对象头的布局不太一样: 数组类型:Mark W
阅读全文
摘要:整体层次思路:Java采用的是内存共享模型,该模型会遇到内存可见性的问题,而内存可见性通常都是由 重排序 和 写缓冲区 引发的,重排序又分为 处理器重排序 和 编译器重排序 。面对 写缓冲区 的问题,像Java这样的高级语言一般无能为力,所以从 重排序 入手,在重排序里,JVM通过内存屏障提供了一层
阅读全文
摘要:happens before 是JMM的核心概念 JMM的设计 程序员对内存模型的使用。程序员希望内存模型简单易用、易于理解,程序员需要一个强内存模型(尽量偏向顺序一致性)编写程序 编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越小越好,编译器和处理器需要一个弱内存模型(尽量
阅读全文
摘要:final的重排序规则 以下面的代码为例,讲解final写和final读的重排序规则 final写的重排序规则 JMM保证写final变量时不被编译器重排序到构造函数外 编译器会在写final域后,构造函数返回前插入StoreStore屏障 假设现在线程A执行init(),线程B执行read()时,
阅读全文
摘要:队列这个数据结构已经很熟悉了,就不多介绍,主要还是根据代码理解Doug Lea大师的一些其他技巧。 入队 如图所示,很多人可能会很疑惑,为什么第一次入队后,TAIL没有指向Node2?答案是为了效率!Σ(っ °Д °;)っ 那这还能叫队列吗?当然,它依然符合先进先出(FIFO)的规则。只是TAIL变
阅读全文
摘要:HashMap只是相对线程安全,如果出现数据竞争就抛出fail fast;HashTable则将每个操作都上锁,如果有耗时的操作,那么后续的操作均会被阻塞,大大降低程序的吞吐率。而ConcurrentHashMap正是为了解决这样一个问题而出现的。 ConcurrentHashMap和HashMap
阅读全文
摘要:其中主要是了解下 以及 是支持对象引用原子更新的类,仅仅是支持引用,如果要让对象内的字段支持原子更新,就一定要使用到 。 字段更新类需要特别注意,字段必须是 类型的。 和`AtomicMarkableReference`均是用于解决ABA问题的类(后者不知道有没有,暂时没实践经验)。前者解决字段方面
阅读全文
摘要:背景 在学习Idea的插件开发时,用到了相关的 这个东西,里面的 有一个 方法引起了我的注意,我发现我不知道—— 科普 首先知晓一下几个名词—— 路径 、 绝对路径/相对路径 、 规范路径 然后考虑以下几种路径: 1. c:\temp\file.txt 2. .\file.txt 3. c:\tem
阅读全文

浙公网安备 33010602011771号