Java高并发编程
文章平均质量分 65
大浪中航行
这个作者很懒,什么都没留下…
展开
-
实战Java高并发程序设计(二)Java并行程序基础
进程与线程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是程序的容器。线程(Thread)是CPU调度的最下单位,它是建立在进程的基础上运行的。使用多线程而不使用多进程的原因是,线程间的切换和调度的成本远小于进程。线程的State有一下几种: (1) NEW:线程还没有开始执行。 (2) RUNNAB原创 2017-07-11 21:19:04 · 636 阅读 · 0 评论 -
Semaphore源码解析
Semaphore的实现主要依赖AbstractQueuedSynchronized,它实现了AQS的共享锁方案,即实现了tryAcquireShared与tryReleaseShared这两个方法。Sync,继承自AbstractQueuedSynchronized,实现了非公平的tryAcquireShared方法与tryReleaseShared。abstract static c...原创 2018-07-01 21:57:11 · 397 阅读 · 0 评论 -
深入ReentrantLock源码解析
ReentrantLock是基于AQS实现的,它提供了公平锁与非公平锁两种策略,当然这两种策略都是抢占式的。其核心代码是对AQS的公平、非公平的实现,下面我们来看其核心代码:内部类Sync,该类定义为抽象类,并继承自AbstractQueuedSynchronizer,它还会被NonfairSync(非公平策略)与FairSync(公平策略)两个类继承。主要关注nonfairTryAcqui...原创 2018-07-01 21:21:59 · 954 阅读 · 0 评论 -
在竞争激烈的情况下,ReentrantLock与CAS的性能比较
这次看了源码,发现ReentrantLock的底层实现是AQS,而AQS底层实现是Volatile+CAS+CLH队列,因此想看看ReentrantLock与CAS的性能比较,因此做了这么一组实验。// 使用ReentrantLockclass LockRunnable implements Runnable { static int i = 0; private Reen...原创 2018-07-01 11:52:10 · 2640 阅读 · 0 评论 -
深入AbstractQueuedSynchronized(AQS)源码
AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等等源码盗用一张图,来源http://www.cnblogs.com/waterystone/p/4920797.html AQS通过维护一个private volatile int state,并提供getState(),...原创 2018-06-30 22:57:22 · 1353 阅读 · 0 评论 -
深入synchronized原理
参考博客synchronized关键字最主要有以下3种应用方式 1. 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 2. 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 3. 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。Java对象头Java对象头由如下两部分组成: 1. Mark Word:存...原创 2018-06-30 17:09:59 · 293 阅读 · 0 评论 -
实战Java高并发程序设计(三)JDK并发包
实战Java高并发程序设计(三)JDK并发包同步控制——重入锁 重入锁可以完全替代synchronized关键字。其使用方法如下:public ReentrantLock lock = new Reentrantlock(); public void run(){ lock.lock(); lock.原创 2017-07-25 15:42:23 · 909 阅读 · 0 评论 -
实战Java高并发程序设计——单例模式
单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只有一个实例。这种模式有一下两个好处: 1.对于使用频繁地对象,可以省略new操作花费的时间。特别是对于那些重量级对象而言,能够节省很多系统开销。 2.由于new操作的频率减少,系统内存的使用频率也会降低。这将减少JVM的GC压力。 下面来看一种单例实现public原创 2017-07-25 12:48:21 · 1113 阅读 · 0 评论 -
实战Java高并发程序设计(一)走进并发世界
基本概念并发(concurrency)和并行(parallelism) 并发偏重玉多个任务交替执行,而多个任务之间可能还是串行的。 并行是真正意义上的“同时执行”。临界区 临界区用来表示一种公共资源,或者说是共享数据,可以被多个线程使用。但是每次只能由一个线程使用它。阻塞(blocking)和非阻塞(non-blocking) 阻塞指多个线程因为需要某个临界区资源而发生等待。 非阻塞是原创 2017-07-04 22:07:04 · 1554 阅读 · 0 评论 -
ThreadPoolExecutor源码解析
概述Core and maximum pool sizes当有新的task通过execute方法提交。 1. 如果目前线程数 < corePoolSize,不论是否有空闲线程,这时都会创建一个新的线程来执行这个任务。 2. 如果corePoolSize < 目前线程数 < maximumPoolSize,只有当队列满了之后才会创建新线程Creating n...原创 2018-07-20 14:26:02 · 324 阅读 · 0 评论