Java并发
lufy0908
这个作者很懒,什么都没留下…
展开
-
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 · 212 阅读 · 0 评论 -
ConcurrentHashMap源码实现分析
为什么要使用ConcurrentHashMap在多线程环境下,使用HashMap进行put操作,会引起死循环,导致CPU利用率接近100%。HashMap在并发执行put操作时会形成一种环形链表,一旦形成环形数据结构,Entry的nex节点不会为空,当查找一个链表中不存在的数据时,会引起死循环。原因在多并发情况家,一个线程先期完成了扩容,将原来的列表散列到自己的表中,形成了一个倒序,而另一个线程进行扩容时,将已倒序的表又散列成为正序,这样会产生一个环形,当get一个不存在的节点时,会产生一个死循环。所原创 2020-05-15 23:20:34 · 228 阅读 · 0 评论 -
Semaphore并发工具类解析
Semaphore是java并发工具类之一,他继承于AQS类,所以它的底层框架是AQS。他主要用于协调各个线程,以保证合理的使用公共资源,它的应用场景主要用于流控,例如数据库连接池。下面我们看看Semaphore源码,它是如何实现流控的。Semaphore初始化默认使用的是非公平锁机制,看方法名便可知。初始化许可证数量: Sync(int permits) { setState(permits); }获取锁尝试获取许可证,并返回剩下的数量: prote原创 2020-05-12 23:12:23 · 150 阅读 · 0 评论 -
ThreadLocal 辨析
ThreadLocal 和 Synchonized 都用于解决多线程并发訪问。可是 ThreadLocal与 synchronized 有本质的差别。synchronized 是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而 ThreadLocal 为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。*ThreadLo...原创 2020-05-04 23:19:32 · 102 阅读 · 0 评论 -
volatile最轻量的同步机制
volatile 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。public class VolatileCase { private volatile static boolean ready; private static int number; // private static class P...原创 2020-05-04 18:31:21 · 234 阅读 · 0 评论 -
进程与线程的区别
什么是进程和线程进程是程序运行资源分配的最小单位。进程是操作系统分配的最小的单位,包括磁盘IO,cpu、内存空间等。同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。线程是cpu调度的最小单位,必须依赖于进程线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资...原创 2020-05-03 16:21:43 · 182 阅读 · 0 评论 -
并行和并发
我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的并行车辆就是 8 辆此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数或者线程数就相当于并排可以通行的车道;而多个 CPU 就相当于并排有多条高速公路,而每个高速公路并排有多个车道。当谈论并发的时候一定要加个单位时间,也就是说单位时...原创 2020-05-03 16:48:09 · 290 阅读 · 0 评论 -
java线程的中止
中止线程有三种方式分别是,自然中断、stop、中断。他们区别分别为:线程自然终止:要么是 run 执行完成了,要么是抛出了一个未处理的异常导致线程提前结束。stop:暂停、恢复和停止操作对应在线程 Thread 的 API 就是 suspend()、resume()和 stop()。但是这些 API 是过期的,也就是不建议使用的。不建议使用的原因主要有:以 suspend()方法为例,在调用后...原创 2020-05-03 17:41:40 · 146 阅读 · 0 评论