月泉的博客

月泉的博客

分享行走在技术路上的知识

JUC-并发集合类List原理剖析
java中能够直接支持并发的集合有2个类,分别为CopyOnWriteArrayList、CopyOnWriteArraySet CopyOnWriteArrayListCopyOnWriteArrayList是什么CopyOnWriteArrayList是List的子类,它是线程安全的集合类,其主要思想是利用每次修改都采用复制的形式,但因为这种方式其对数据是弱一致性。 怎么使用?1234567public static void main(String[] args) { List<String> names = new CopyOnWriteArrayLi...
JUC-并发原子类Long系列原理剖析
JUC-并发原子类Long系列原理剖析为什么需要并发原子类在并发编程中时常会遇见一个共享资源的读改写,如果要保证这些共享资源的读改写的原子操作只能通过2种方式,一种是锁的方式一种是通过CAS的方式,如果利用锁那么将有可能造成大量的阻塞导致内核态用户态及线程唤醒带来的性能开销,那么如果只是针对单一资源的读改写保证其原子操作利用CAS是最佳的做法了,因为其不会导致线程阻塞挂起。 如何使用12345678910111213141516171819202122232425262728private static AtomicLong count = new AtomicLong();privat...
JUC-ThreadLocalRandom原理剖析
JUC-ThreadLocalRandom原理剖析ThreadLocalRandom是什么在Java中生成随机数通常都会使用Random来生成随机数,用法如下: 123456public static void main(String[] args) { Random random = new Random(); for (int i = 0; i < 10; i++) { System.out.println(random.nextInt(5)); }} 上述代码会生成0-4的十次随机数,那么Random在...
并发编程基础(下)
并发编程基础(下)什么是并发编程想要知道什么叫并发编程,就先要区分什么是“并发”什么是“并行”,并发是指多件事情同时发生,而并行是指的多件事情执行,一个是侧重于发生,一个是侧重于执行,在单核单线程的CPU上实际上使用多线程是没有太大意义的因为一个CPU的一个超线程同时能够执行的线程中的命令只有一个,且都是时间片轮转机制进行轮转占用的,例如CPU0 -> ThreadA -> ThreadB -> ThreadC 一个CPU对应3条线程,那么其结果就是轮流执行,在随着时代的发展,单核CPU的晶体管已经放不下了,发展成了多核,那么再多核CPU的情况下,再去跑多线程,能够使得...
并发编程基础知识(中) 深度剖析ThreadLocal机制
并发编程基础知识(中)ThreadLocal是什么Java中有一个类能够给线程提供线程的局部变量,使用这个类来设置值可以使得每个线程都有自己的一份变量副本,这个类就是ThreadLocal ThreadLocal 的使用123456789101112131415161718192021222324252627282930class ThreadLocalTest{ private static ThreadLocal<String> threadLocal = new ThreadLocal(); public static void getThread...
并发编程基础知识(上)
并发编程基础知识(上)线程是什么?进程是系统调度及分配资源的基本单位,在现今每个进程中都至少拥有一个线程在执行,而线程就是CPU调度执行的基本单位。 为什么需要线程从操作系统的角度出发,从最开始的单进程阻塞执行再到实现了多进程,使得整个操作系统可以运行多个应用程序,如果没有线程,那么系统本身是可以运行多个应用程序,但这些应用程序其本身是阻塞的,比如我点击一个查询按钮,需要耗费30秒, 那么其应用程序就得无响应30秒,为了使进程本身不是阻塞执行且更大化的利用进程的资源和CPU及用户体验从而在进程中在建立了线程的概念,每个线程都拥有一个栈和程序计数器(此句话大多通用,这里限定为Java) 理...
Java并发底层的一些细节
Java并发底层的一些细节 别问为什么不是文章是一张脑图,最近太忙了,本来想写的,结果脑图一梳理发现没时间,那么就在脑图上面做补充了。
JVM调试工具和类结构还有类加载机制
JVM调试工具和类结构还有类加载机制大纲如下: JVM调试工具 Class文件结构 类加载机制 JVM调试工具打开$JAVA_HOME/bin目录下,当然我这里是指的JDK(Java Development Kit)可以看到里面很多可执行文件,这里面都是官方提供的一些工具,都是基于$JAVA_HOME/lib/tools.jar进行的封装,这里介绍几款常用的以及我常用的使用方式。 命令行 jps jinfo jstat jmap jhat jstack 图形化(以后再说) jconsole jvisualvm jps 和Linux下的ps命令很类似,只不过Linux下的ps命...
初识JVM
初识JVM大纲如下: JVM运行时数据区 对象是如何在虚拟中创建的 对象的内存布局 对象访问的定位 垃圾回收算法 垃圾收集算法 Hotspot的实现 JVM的垃圾收集器 对象的引用类型 JVM运行时数据区JVM运行时数据区主要分为5块,先从粗略的角度看,分为线程共享和线程独享 线程共享: 堆、方法区(Java8后被移除,用元空间替代其作用还是一样的) 线程独享: Java方法栈、本地方法栈、程序计数器 线程共享的区域随着虚拟机的启动而启动,虚拟机的销毁而销毁,线程独享的区域随着线程的启动而启动线程的消亡而消亡 堆:基本上所有的对象都是在堆上完成分配,也是GC关注的重点对象,因为现...
跟我volatile从表面到底层
跟我volatile从表面到底层 食用该篇文章,作者建议你最好已经提前了解过:JMM以及CPU缓存一致性协议还有相关的内存屏障的知识并且能够理解CPU的乱序执行,如果作者理解不当,欢迎指出。 如果本文对你有所帮助不妨给博客的Github点个小星星,提问和文章有什么地方理解错了也可以直接在Github上提交issue 该篇文章讨论的议题: java语义上的volatile 内存屏障 JVM的实现 生成的汇编指令 如何保障的的可见性和有序性 为什么volatile不能保证复合操作的原子性 java语义上的volatile我们从一个很常见的案例开始出发 1234567891011121...
avatar
月泉
热爱技术
FRIENDS
charles