`
文章列表
线程池主要类概览   Executor Executor的初衷是将 任务提交 和 任务执行的细节 解耦。 只有一个提交任务的方法: void execute(Runnable command);   ExecutorService 虽然我们习惯将ExecutorService称为线程池,但它并不是简单的线程“池”。它提供了比较全面的 线程管理 与 任务提交 等方法,如 shutDown、submit。 submit 可以解决 Runnable 无法返回结果的困扰; 其返回的Future提升了任务的可操控性,弥补了 execute 方法的不足: Futur ...
参考: 《In ArrayBlockingQueue, why copy final member field into local final variable?》 《Performance of locally copied members ?》   JDK源码中经常会出现一种代码模式:将类成员变量复制到方法本地变量上。 如:String.compareTo() 方法中会将类成员 ...
JDK并发队列概览   典型特性 Queue vs Deque Deque 是 双端队列,它的侧重点是支持队列首尾都能添加删除元素。Deque 提供了更多方法,如典型的 offerLast(e),pollLast()   Blocking vs 非Blocking Blocking表示队列提供了“等待性”相关操作。如,获取元素时会等到队列中有元素时再返回;添加元素时会等到队列有空间时再添加。  /** * Inserts the specified element into this queue, waiting if necessary * for ...
Java的内存模型中某些“奇技淫巧”,或者说是“巫术”,对于某些特定场景是非常关键的。 从某种角度而言,我们可以直接称之为“缺陷”;“让语言的使用者无需关心底层实现”是编程语言发展的重要方向之一。“程序语义简单直观”也是 JSR 133 的目标之一。如,JDK CopyOnWriteArrayList.set() 方法中对 volatile 字段的处理方式就涉及了非常晦涩的内存模型特性。(详情)   原文:《JSR 133 (Java Memory Model) FAQ》   Jeremy Manson and Brian Goetz,2004年2月 目录: 什么是内存模型(M ...
三大并发类:Concurrent、CopyOnWrite、Blocking Java并发包中的集合从线程安全实现方式而言可分为三类:Concurrent、CopyOnWrite、Blocking。 Concurrent 类的集合基于 lock-free 的方式实现。严格来说,它们是真正的并发。适合实现较高的吞吐量。 CopyOnWrite 类的集合顾名思义,会在该变集合的操作中拷贝原数据,并用新的内部集合对象替换原内部对象。 Blocking 类的集合则通过锁(ReentrantLock)实现。它们会提供 “等待性” 的方法。 Concurrent 的代价 虽然 Co ...
我们说的 Filter 和 Interceptor 是啥? Filter:javax.servlet.Filter Interceptor:org.springframework.web.servlet.HandlerInterceptor 参考: 《Filter vs Interceptor》 《Difference between Interceptor and Filter in Spring MVC》   简介 Filter public interface Filter { public void init(FilterConfig fi ...
原理简述 对于通常的命令行输出,大部分人的印象都是一行一行递增的模式。而进度条需要每次内容更新都在同一行,容易让人觉得很“神奇”。一些问答网站上,如 StackOverflow,就有人问“某某语言如何实现命令行进度条 ...
这里只提供最常用的Dubbo服务调优点简要说明,旨在用更小的成本,获得更多性能收益。 这里的“成本”是综合性的,包括 时间、硬件、技术学习等。即,此指南追求“实用性”。“最常用”、“简要”也意味着这不是一份全 ...
网上有很多Spring国际化的样例,但是缺少详细的样例。特别是国外网上很多是Spring MVC(Web)之类的样例,而国内稍具规模的软件开发组织都采用前后端分离的模式,所以几乎很少有易于模仿的 纯基础Spring国际化 样例。 1. 创建 Spring Boot 工程 1.1 Maven依赖 此示例以Command Line方式运行,所以依赖 spring-boot-starter,而不是 spring-boot-starter-web。 本人非常讨厌 Spring官网那种 “直接” “仅” 提供Web服务样例的入门示例! 我觉得入门就该从最简单基础的模式开始,“直接从Web ...
Java并发包中有很多可以实现同步的结构。以下几种就属于典型的“非显式”锁: Semaphore:Java版本的信号量实现。 CountDownLatch:允许一个或多个线程等待某些操作完成。 CyclicBarrier:允许多个线程等待达到某个屏障。 Phaser:分阶段地等待多个线程达到某个屏障。 CountDownLatch vs CyclicBarrier CountDownLatch 和 CyclicBarrier 都可用于等待多个线程完成相关操作(达到某个同步点)。 CountDownLatch 侧重于 让一个线程等待其它多个线程执行完成任务。 CyclicB ...
1. 线程死锁的原因 死锁:两个或多个线程之间,由于互相持有对方需要的锁,而永久出于阻塞的状态。   会引起死锁的代码示例: public static void main(String[] args) throws InterruptedException { String lockA = "lock-A"; String ...
一个最简单的HelloWorld程序,背后也有多个线程。 public static void main(String[] args) { System.out.println("Hello World"); ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); long[] threadIds = threadMXBean.getAllThreadIds(); ThreadInfo[] thre ...
Java的单例模式实现方式一直是各路“大神”讨论的重点。 人们往往会去关注是否线程安全,是否支持懒加载,以前老版本Java的双检锁问题,volatile happen-before 问题,学究式的枚举类式实现。 我们真的需要了解这么多细节吗? ...
Java单继承的局限 与C++ Python之类语言不同,Java 不支持多继承。即,一个类不能同时直接继承多个父类。而接口(interface)是抽象方法的集合,是声明性的。所以当需要重用某些处理逻辑时,由静态方法组成的工具类(Utils) ...
简述 Java NIO 中提供了 DirectBuffer、MappedByteBuffer 以提高IO效率。   DirectBuffer DirectBuffer 占用的是 堆外内存。JVM 会在 DirectBuffer 上直接使用 “本地IO操作”(Native I/O Operations)。 Buffer 的地址对“本地IO操作”非常关键。所以 ...
Global site tag (gtag.js) - Google Analytics