自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 ConcurrentHashMap1.8学习笔记

ConcurrentHashMap1.8和1.7相比之下做了一些改进,其改进如下::改进1:取消的segments字段,使用Entry<K,V>保存数据,并大量的使用了CAS+synchronized来保证并发安全性。改进2:将原先的table数组+单向链表变更为table+单链表+红黑树。因为用户如果链表运气不佳,还是会存在一些队列长度过长的情况,如果还使用单项列表的查找方式,那么查询时间复杂度将退化为O(N),因此对于个数超过8的列表,jdk1.8会将其转换为红黑树结构,查询速度就可降低

2020-05-20 00:05:36 209

原创 ConcurrentHashMap源码实现分析

为什么要使用ConcurrentHashMap在多线程环境下,使用HashMap进行put操作,会引起死循环,导致CPU利用率接近100%。HashMap在并发执行put操作时会形成一种环形链表,一旦形成环形数据结构,Entry的nex节点不会为空,当查找一个链表中不存在的数据时,会引起死循环。原因在多并发情况家,一个线程先期完成了扩容,将原来的列表散列到自己的表中,形成了一个倒序,而另一个线程进行扩容时,将已倒序的表又散列成为正序,这样会产生一个环形,当get一个不存在的节点时,会产生一个死循环。所

2020-05-15 23:20:34 226

原创 Semaphore并发工具类解析

Semaphore是java并发工具类之一,他继承于AQS类,所以它的底层框架是AQS。他主要用于协调各个线程,以保证合理的使用公共资源,它的应用场景主要用于流控,例如数据库连接池。下面我们看看Semaphore源码,它是如何实现流控的。Semaphore初始化默认使用的是非公平锁机制,看方法名便可知。初始化许可证数量: Sync(int permits) { setState(permits); }获取锁尝试获取许可证,并返回剩下的数量: prote

2020-05-12 23:12:23 147

原创 ThreadLocal 辨析

ThreadLocal 和 Synchonized 都用于解决多线程并发訪问。可是 ThreadLocal与 synchronized 有本质的差别。synchronized 是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而 ThreadLocal 为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。*ThreadLo...

2020-05-04 23:19:32 97

原创 volatile最轻量的同步机制

volatile 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。public class VolatileCase { private volatile static boolean ready; private static int number; // private static class P...

2020-05-04 18:31:21 231

原创 java线程的中止

中止线程有三种方式分别是,自然中断、stop、中断。他们区别分别为:线程自然终止:要么是 run 执行完成了,要么是抛出了一个未处理的异常导致线程提前结束。stop:暂停、恢复和停止操作对应在线程 Thread 的 API 就是 suspend()、resume()和 stop()。但是这些 API 是过期的,也就是不建议使用的。不建议使用的原因主要有:以 suspend()方法为例,在调用后...

2020-05-03 17:41:40 145

原创 并行和并发

我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的并行车辆就是 8 辆此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数或者线程数就相当于并排可以通行的车道;而多个 CPU 就相当于并排有多条高速公路,而每个高速公路并排有多个车道。当谈论并发的时候一定要加个单位时间,也就是说单位时...

2020-05-03 16:48:09 288

原创 进程与线程的区别

什么是进程和线程进程是程序运行资源分配的最小单位。进程是操作系统分配的最小的单位,包括磁盘IO,cpu、内存空间等。同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。线程是cpu调度的最小单位,必须依赖于进程线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资...

2020-05-03 16:21:43 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除