java多线程
文章平均质量分 86
空方块
这个作者很懒,什么都没留下…
展开
-
源码解析ConcurrentHashMap
本文基于JDK1.7ConcurrentHashMap包含(segmentMask+1)个Segment,而每个Segment包含若干个HashEntry,各Segment写操作互不影响,实现了分段锁,提供了比Hashtable更好的并发性。1.构造函数 @SuppressWarnings("unchecked") public ConcurrentHas原创 2016-05-20 12:02:49 · 338 阅读 · 0 评论 -
线程池&任务
1.线程池1.无限制创建线程的缺点#1:线程生命周期的开销。线程的创建与关闭不是“免费”的。实际的开销依据不同的平台不一样,而且创建线程是需要时间的,会带来请求的延迟。如果没处理一个请求创建一个线程就会大量消耗计算资源。#2:资源消耗量。活动线程会消耗系统资源,尤其是内存,当可运行的线程多于可用的处理器数,线程则会空闲。大量的空闲线程占用更多的内存,给垃圾回收器带来压力,而且在竞争原创 2016-06-02 14:28:36 · 1889 阅读 · 1 评论 -
sun.misc.Unsafe's APIs
Compare And Swap(CAS):CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。Java并发包(java.util.concurrent)中大量使用了CAS操作,涉及到并发的地方都调用了sun.misc.Unsafe类方法进行CAS操作。U原创 2016-05-20 17:14:21 · 271 阅读 · 0 评论 -
线程通信
1.可见性1.1.非原子的64位操作没有声明为volatile的64位数值变量(double、long),JVM允许将64位的读或写划分为俩个32位操作。如果读写在不同的线程,可能会出现得到一个值的高32位和另一个值的低32位。当JVM的规范完成是,很多主流的处理器框架还不能有效地支持64为算数原子操作。1.2.加锁锁不仅仅是关于同步与互斥的,也是关于内存可见的。为了保证所有线原创 2016-05-31 14:16:31 · 389 阅读 · 0 评论 -
java显式锁
1.Lock和ReentrantLock1.1.Lock接口:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, Tim原创 2016-06-06 14:59:33 · 566 阅读 · 0 评论 -
java并发机制底层原理
0.术语内存屏障:是一组处理器指令,用于实现对内存操作的顺序限制。缓存行:缓存中可以分配的最小存储单元。原子操作:不可中断的一个或一系列操作。缓存行填充:当处理器识别到从内存中读取操作数是可缓存的,处理器读取整个缓存航到适当的缓存(L1,L2,L3的或所有)。缓存命中:如果进行高速缓存航填充操作的内存位置仍然是下次处理器访问的地址是,处理器从缓存中读取操作数,而不是从内存。原创 2016-05-31 18:00:23 · 3986 阅读 · 0 评论 -
java线程概述
1.多线程概述#1:Main函数本身就是一个线程,主线程。#2:多线程可以继承Thread类,也可以继承Runnable接口。#3:没有严格意义上的并发。对于单核CPU的物理机来说,同一时刻有且只有一条线程在执行,运行多条线程,只是CPU在切换执行权而已,切换速度取决于CPU主频。#4:JVM自身有很多后台线程执行。#5:Runnable是一个可执行任务的标志,Thread是线原创 2016-05-30 21:24:10 · 489 阅读 · 0 评论