关闭

java关键字-final语义

转载:http://www.infoq.com/cn/articles/java-memory-model-6/ 对java关键字final的解析,以前都没关注过final竟然这些东西。 与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被...
阅读(560) 评论(0)

JUC源码分析14-集合-HashMap

在学习juc并发集合前先看了下HashMap,听说好多面试会问这个,没遇见过,学习下吧。学习的jdk源码一直都是1.7版本的,其他版本可能有些微不同,应该也不影响学习。 HashMap有几点需要记得吧: 1.是非线程安全的:javadoc说明:可以通过Map m = Collections.synchronizedMap(new HashMap(...));解决,或者干脆用juc里面Concu...
阅读(3528) 评论(0)

JUC源码分析13-locks-ReentrantReadWriteLock

ReentrantReadWriteLock基于AQS实现读写锁的同步: 1.利用共享模式实现读锁,独占模式实现写锁; 2.支持公平和非公平,非公平的情况下可能会出现读锁阻塞写锁的场景; 3.写锁阻塞写锁和读锁,读锁阻塞写锁; 4.写锁可以降级为读锁,读锁不能升级为写锁,只能先release再lock; 5.写锁支持condition条件; 6.读写锁都支持超时/中断lock; ...
阅读(2527) 评论(0)

JUC源码分析12-locks-CyclicBarrier

CyclicBarrier字面意思是可循环栅栏,看javadoc的帮助A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fi...
阅读(191) 评论(0)

JUC源码分析11-locks-Semaphore

Semaphore不明白为什么直接放在juc包下,不是应该放locks下面嘛,这里还是当初locks学习吧。 Semaphore英文是信号量的意思,在这里我喜欢叫资源或者许可,实现的功能就是获取资源,获取到就干活,获取不到就排队,等别人释放了资源,然后所有排队的再去获取。实现AQS的共享api,看个入门demo: public class SemaphoreTest { //3个...
阅读(255) 评论(0)

JUC源码分析10-locks-CountDownLatch

上一次学习了ReetrantLock,是对AQS独占模式的,这次学习CountDownLatch,是共享模式api的实现。人生不死,学无止境。先看个demo吧: import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { private static CountDownLatch ...
阅读(516) 评论(0)

JUC源码分析9-locks-ReentrantLock

ReentrantLock可重入锁,使用比synchronized方便灵活,可作为替代使用: 1.支持公平/不公平锁; 2.支持响应超时,响应中断; 3.支持condition; ReentrantLock实现了Lock接口,内部使用static类继承AQS实现独占式的api来实现这些功能,使用AQS的state来表示锁可重入次数: 之前学习AQS的时候说过请求和rele...
阅读(662) 评论(0)

JUC源码分析8-locks-AQS-condition

AQS的conditionObject实现类似object的wait/notify/notify的功能,功能大概是: 1.object维护一个监视器和一个等待队列,condition对于一个lock可以有多个condition,对于每个condition维护一个条件队列; 2.提供wait/signal/signalall功能。 来个入门demo: public class Conditi...
阅读(761) 评论(1)

JUC源码分析7-locks-AQS-共享模式

AQS中一定要记住2点: 1.处理流程: if(!请求成功) 加入队列 2.请求是对state的判断,AQS不关心你state表示什么,你可以表示状态也可以表示数量,由子类实现对请求的判断。将规则的判断和规则的处理分离,有点像模板模式。 先想想什么是独占什么是共享,举个栗子:独占就像大家拿号去排队体检,你拿号了发现前面还有n个人,没办法,等吧,然后你前面的人体检完了,医生就说,你通知下一...
阅读(961) 评论(1)

JUC源码分析6-locks-AQS-独占模式

AbstractQueuedSynchronizer(下面简称AQS),javadoc说明: Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on  first-in-first-out (FIFO) wait que...
阅读(757) 评论(0)

JUC源码分析5-locks-LockSupport

LockSupport通过unsafe提供阻塞和唤醒线程的方法,AQS和其他的lock都会使用到这个基础类。 private LockSupport() {} // Cannot be instantiated. private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long parkBl...
阅读(296) 评论(0)

JUC源码分析4-原子变量-AtomicStampedReference/AtomicMarkableReference

之前讲过的AtomicInteger等CAS操作会产生ABA问题,什么是ABA?wiki官方解释https://en.wikipedia.org/wiki/ABA_problem,简单讲就是多线程环境,2次读写中一个线程修改A->B,然后又B->A,另一个线程看到的值未改变,又继续修改成自己的期望值。如果我们不关心中间状态的变化,只关心最终结果,就无所谓ABA问题。看代码: import jav...
阅读(329) 评论(0)
    个人资料
    • 访问:61823次
    • 积分:1342
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:72篇
    • 译文:1篇
    • 评论:15条
    最新评论