![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
MJ丶
没有梦想何必远方
展开
-
实战Java高并发程序设计之概念
学习高并发你必须知道的几个重要的概念:1. 同步(synchronous)和异步(asynchronous)同步和异步是对方法的调用而言的:同步调用时,会等待调用的方法完成以后才能继续执行这个方法。异步调用的时候会瞬间的返回,但是并不是表示这个请求已经完成了,但是会在后台起一个线程去执行接下来的任务2.并发(Concurrency)和并行(Parallelism)原创 2017-03-22 21:49:11 · 475 阅读 · 0 评论 -
实战Java高并发程序设计之ReadWriteLock
ReadWriteLock维持着一对关联的锁.一个仅仅为读操作,一个仅仅为写操作. 只要没有写操作,读锁不是互斥的.然而写锁是互斥的所有ReadWriteLock实现必须保证writeLock操作的内存同步效果对于相关的readLock而言也是一样的. 也就是说,一个线程成功获取读锁定将会看到在之前释放的写锁定所做的所有更新.读写分离锁可以有效的帮助减少锁竞争,以提升性能。用锁原创 2017-06-11 20:05:51 · 304 阅读 · 0 评论 -
实战Java高并发程序设计之Semaphoer
信号量为多线程协作提供了更强大的控制方法.广义上说,信号量是对锁的扩展.无论是内部锁synchronized还是重入锁ReentranLock,一次都只允许一个线程访问同一个资源,而信号量却可以指定多个线程,同时访问某一个资源. 概念上,一个信号量维持着大量的许可. 每个acquire请求都会阻塞直到一个permit可用为止,并且然后拥有这个许可. 每个release请求都可能会释放一个per原创 2017-06-11 17:14:56 · 307 阅读 · 0 评论 -
实战Java高并发程序设计之CyclicBarrier
CyclicBarrier是另一种多线程并发控制使用工具.和CountDownLatch非常的相似,它也可以实现线程间的计数等待,但它的功能比CountDownLatch更加复杂且强大.CyclicBarrier可以理解成循环栅栏.栅栏就是一种阻碍物.这里是用来阻止线程继续执行,要求线程在栅栏处等待.前面Cyclic意为循环,也就是说这个计数器可以反复使用.CyclicBa原创 2017-06-19 22:19:12 · 321 阅读 · 0 评论 -
实战Java高并发程序设计之CountDownLatch
CountDownLatch:一个倒数计时器.这个工具类通常用来控制线程等待,它可以让某一个线程等待直到计时结束,再开始执行.CountDownLatch允许一个或多个线程等待直到在其他线程中执行的一组操作如上图所示:主线程会在零界线上等待,检查任务会分别执行,当所有的任务全部都到达零界点以后,主线程才能继续往下执行基本用饭:CountDownLatch是一原创 2017-06-17 21:42:32 · 945 阅读 · 0 评论 -
实战Java高并发程序设计之ReentrantLock(二)
前面讲到了ReentranLock的基本使用,现在来看看它的底层实现.先看ReentrantLok的UML类图(图片来自:http://www.cnblogs.com/skywang12345/p/3496147.html)ReentrantLock实现了Lock接口.内部维持着一个Sync对象. /** * 该锁基于同步控制. 分为公平锁和非公平锁.原创 2017-04-05 22:22:03 · 333 阅读 · 0 评论 -
实战Java高并发程序设计之ReentrantLock(一)
重入锁的特性:1.可重入.public class ReentrantLockTest extends Thread { public static ReentrantLock lock = new ReentrantLock(); public static int i = 0; public void run(){ for(int j = 0;j<100000;j++){原创 2017-03-28 00:11:57 · 309 阅读 · 0 评论 -
实战Java高并发程序设计之Java内存模型和线程安全
Java内存模型原子性:是指一个操作是不可中断的.即使多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰.一般CPU的指令是原子的.Q:i++是原子操作吗?A:不是.32位系统来说long型数据的读写不是原子性的(因为long有64位),也就是说两个线程同时对long进行写入的话,对线程之间的结果是有干扰的.有序性:在并发时,原创 2017-03-27 21:13:16 · 355 阅读 · 0 评论 -
Java并发之AQS浅析
上一章我们讲了ReentrantLock.再来回顾下它的构造函数. public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(原创 2017-03-28 23:21:41 · 459 阅读 · 0 评论 -
实战Java高并发程序设计之多线程基础
1.什么是线程– 线程是进程内的执行单元进程的切换是一个重量级的操作,如果使用多进程去做并行,并发度不可能是很高的而线程是进程里更小的一个执行单元,所以线程可以较为广泛的用来做并发程序的设计2.线程的生命周期/** * 线程的所有状态都在Thread中的State枚举中定义 * @author mj * */public enum State原创 2017-03-22 22:58:12 · 373 阅读 · 0 评论 -
实战Java高并发程序设计之Condition
此处只讲该接口中的具体方法,至于实现,以后再讲.在多线程基础里面,我们将过了Object.wai()和Object.notify()方法.如果大家理解了这两个方法的话,那么就能很容易的理解Condition对象了.它和wait()和notify()方法的作用大致相同.但是wait和notify要配合synchronized关键字使用,而Condition是与重入锁相关联的.利用Cond原创 2017-03-29 20:53:27 · 314 阅读 · 0 评论 -
实战Java高并发程序设计之LockSupport
LockSupport简介:LockSupport是一个非常方便实用的线程阻塞工具,它可以在线程任意位置让线程阻塞.和Thread.suspend()相比,它弥补了由于resume()在前发生,导致线程无法继续执行的情况.和Object.wait()相比,它不需要先获得对象的锁,也不会抛出中断异常.LockSupport是用于创建锁和其他同步类的基本线程阻塞原语.LockSuppo原创 2017-06-20 21:58:34 · 327 阅读 · 0 评论