Java基础
文章平均质量分 96
BoscoKuo
言念君子,温其如玉。
展开
-
ThreadLocal源码解析
1 ThreadLocal简单介绍ThreadLocal是JDK包提供的,它提供了线程本地变量。通俗一点说,就是你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,避免了线程安全问题。2 ThreadLocal实现原理由上图可得,Thread类里有一个threadLocals和inhe...原创 2020-04-16 22:15:00 · 243 阅读 · 0 评论 -
AQS实践(一):ReentrantLock概述
1 ReentrantLock类图结构ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取到该锁,其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。上图是ReentrantLock类图结构,通过类图可以对ReentrantLock内部有个大致的了解。ReentrantLock是使用AQS来实现的,并且根据参数来决定内部是一个公平锁还是非公平锁。// 默认是非公...原创 2019-11-29 17:11:43 · 254 阅读 · 0 评论 -
Java并发编程:AQS概述
1 AQS 锁的底层支持AQS的全称是AbstractQueuedSynchronizer,抽象同步队列。ReentrantLock底层使用了AQS(内部静态类Sync实现了AQS),ThreadPoolExecutor底层也是用了AQS(内部类Worker实现了AQS)。上类图可以看处,AQS是一个FIFO的双向队列,其内部通过结点head和tail记录队首和队尾元素。1.1 内部静态类N...原创 2019-11-27 18:16:39 · 644 阅读 · 0 评论 -
Java并发编程:ScheduledThreadPoolExecutor源码解析
1 ScheduledThreadPoolExecutor类图ScheduledThreadPoolExecutor继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。线程池队列是DelayedWorkQueue,是一个延迟队列。ScheduledFutureTask是具有返回值的任务,继承自FutureTask。FutureTask的内部有...原创 2019-11-14 14:48:47 · 255 阅读 · 0 评论 -
浅谈JVM
浅谈JVMJVM内存布局规定了Java在运行过程中内存申请、分配和管理的策略,保证了JVM高效稳定的运行。结合JVM虚拟机规范,以及自己对JVM的理解,与大家讨论一下JVM内存布局。(一)Heap 堆区Heap存储着几乎所有的实例对象,堆内对象由垃圾回收器自动回收,堆区由各子线程共享使用。显而易见,堆区是内存区域中所占内存最大的。如果没有节制的创建对象,容易消耗完所有空间,产生OutOfM...原创 2019-08-01 17:53:57 · 606 阅读 · 0 评论 -
并发编程的基础知识(一)
1 什么是多线程并发笔者首先阐述两个概念,什么是并行和并发。并发是指同一时间段内多个任务同时都在执行,并且都没有执行结束。并行是在单位时间内多个任务同时在执行。并发强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多任务是并发执行的,这是因为单个CPU同一时间只能执行一个任务。在单CPU时代,多任务是共享一个C...原创 2019-09-24 17:37:56 · 220 阅读 · 0 评论 -
并发编程的基础知识(二)
1 什么是伪共享为了解决计算机系统中主内存与CPU之间运行速度差的问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。这个Cache一般是被集成到CPU内部的,所以也称为CPU Cache。图1-1是两级Cache结构示意图。在Cache内部是按行进行存储的,其中每一行称为一个Cache行。Cache行是Cache与主内存进行数据交换的单位,Cache行的大小一般为2的...原创 2019-09-26 11:14:26 · 178 阅读 · 0 评论 -
Java并发编程:ThreadPoolExecutor源码解析
1 介绍线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。二是线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态增加线程数。2 ThreadPoolExecutor类图高清图请点击Integer类型用32位二进制表示,其中高三位表示线程池状态,后面29位用来记录线程池线程个数。 // 默认是Running状态,线程个数为0 private f...原创 2019-09-29 08:30:11 · 233 阅读 · 0 评论