![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 57
脚踏实地,仰望星空
加油,坚持努力。
展开
-
Java foreach 中List移除元素抛出ConcurrentModificationException原因全解析
一:Java foreach 中List移除元素抛出ConcurrentModificationException原因全解析先看《阿里巴巴 Java开发手册》中的相关规定:反例源代码public static void main(String[] args) { List<Integer> list = new ArrayList(); for (int i = 0; i < 10; i++) { list.ad原创 2021-07-02 20:44:00 · 535 阅读 · 1 评论 -
int和Integer的区别
一:int和Integer的区别1、Integer是int的包装类,int则是java的一种基本数据类型2、Integer变量必须实例化后才能使用,而int变量不需要3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值4、Integer的默认值是null,int的默认值是0关于Integer和int的比较1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永...原创 2021-07-01 17:10:43 · 361 阅读 · 0 评论 -
ThreadLocal原理分析
一:什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。 既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该原创 2021-06-23 22:56:35 · 493 阅读 · 0 评论 -
ThreadPoolExecutor线程池参数设置技巧
一、ThreadPoolExecutor的重要参数corePoolSize:核心线程数核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执行maxPoolSize:最大线程数当线程数>=corePoolSize,且任务原创 2021-06-22 23:25:32 · 2611 阅读 · 0 评论 -
HashMap中通过key获取value源码剖析
public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); } private V getForNullKey() { if (size == 0)...原创 2021-06-17 23:19:49 · 1628 阅读 · 0 评论 -
JUC之阻塞队列
一:阻塞队列原创 2021-05-19 21:38:06 · 153 阅读 · 0 评论 -
集合
一:JDK下的集合原创 2021-05-19 21:37:33 · 48 阅读 · 0 评论 -
线程
一:线程的几种状态与彼此之间的区别二:线程的实现方式原创 2021-05-19 21:36:41 · 43 阅读 · 0 评论 -
Volatile 和 CAS 的弊端之总线风暴
一、什么是总线风暴总线风暴,听着真是一个帅气的词语,但如果发生在你的系统上那就不是很美丽了,废话不多说,先看图说结论。什么是总线风暴,先来看结论在java中使用unsafe实现cas,而其底层由cpp调用汇编指令实现的,如果是多核cpu是使用lock cmpxchg指令,单核cpu 使用compxch指令。如果在短时间内产生大量的cas操作在加上 volatile的嗅探机制则会不断地占用总线带宽,导致总线流量激增,就会产生总线风暴。 总之,就是因为volatile 和CAS 的操作导致BUS原创 2021-05-16 23:02:00 · 811 阅读 · 1 评论 -
HashMap1.7 头插法造成死循环的原因
一:HashMap1.7 头插法造成死循环的原因原创 2021-05-05 12:18:50 · 2187 阅读 · 0 评论 -
设计模式之代理模式
一:什么是代理?代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。所以,代理就有一种中间人的味道。接下来,我们说...原创 2018-12-18 21:41:40 · 138 阅读 · 0 评论 -
Semaphore(信号量)的工作原理及实例
一:工作原理Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量从而控制允许活动的线程数。synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个...原创 2018-12-27 20:48:55 · 2307 阅读 · 0 评论 -
几种常见的线程池
几种常见线程池的创建方式一:创建大小不固定的线程池二:创建固定数量线程的线程池三:创建单线程的线程池四:创建定时线程** * @author lizhangyu * @date 2020/6/6 17:51 */public class test4 { public static class taskDemo implements Runnable { @Override public void run() { for原创 2020-06-06 18:52:41 · 185 阅读 · 0 评论 -
synchronized原理解析
一:synchronized原理解析1:对象头首先,我们要知道对象在内存中的布局:已知对象是存放在堆内存中的,对象大致可以分为三个部分,分别是对象头、实例变量和填充字节。对象头zhuyao是由MarkWord和Klass Point(类型指针)组成,其中Klass Point是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例,Mark Word用于存储对象自身的运行时数据。如果对象是数组对象,那么对象头占用3个字宽(Word),如果对象是非数组对象,那么对象头占用2个字宽原创 2020-05-23 11:51:35 · 303 阅读 · 0 评论 -
CountDownLatch(倒计时器)使用场景及原理解析
一:CountDownLatch(倒计时器)使用场景CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。①某一线程在开始运行前等待n个线程执行完毕。将 CountDownLatch 的计数器初始化为n :new CountDownLatch(n),每当一个任务线程执行完毕,就将计数器减1countdownlatch.countD...原创 2018-12-27 21:35:45 · 1943 阅读 · 1 评论 -
CyclicBarrier(循环栅栏)的工作原理及实例
一:CyclicBarrier的工作原理CyclicBarrier 和 CountDownLatch 非常类似,它也可以实现线程间的技术等待,但是它的功能比 CountDownLatch 更加复杂和强大。主要应用场景和 CountDownLatch 类似。CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可...原创 2018-12-27 21:52:18 · 749 阅读 · 0 评论