
Java并发编程
文章平均质量分 87
iteye_7298
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发编程(一)--volatile, CAS, Atomic变量
JVM volatile语义: mark: (1)Java 内存模型不会对valatile指令的操作进行重排序:这个保证对volatile变量的操作时按照指令的出现顺序执行的。 (2)volatile变量不会被缓存在寄存器中(只有拥有线程可见)或者其他对CPU不可见的地方,每次总是从主存中读取volatile变量的结果。也就是说对于volatile变量的修改,其它线程总是可见的,并...原创 2013-03-23 19:28:05 · 191 阅读 · 0 评论 -
Java并发编程(二)--j.u.c锁机制
AQS juc很多操作都是基于AQS(AbstractQueuedSynchronizer) 不同于自旋锁,juc使用的是volatile机制的状态变量; 内部也有一个阻塞线程的等待队列 每个线程都被封装在一个Node结点中 static final class Node { // 当前线程被取消 static final int CANCELLE...原创 2013-03-24 10:34:45 · 205 阅读 · 0 评论 -
Java并发编程(三)--并发数据结构
ConcurrentHashMap的设计实现 为什么还需要ConcurrentHashMap,不是有了Hashtable吗。如果所有的事情都用Synchronized去解决,那么这个世界会变得很糟糕。 ConcurrentHashMap最绝妙的地方是采用了锁分段技术,一种分而治之的策略,一个HashMap被分为了几个Segment,在每个Segment里面实行同步控制。 对Concurr...原创 2013-03-24 20:33:16 · 167 阅读 · 0 评论 -
Java并发编程(四)--死锁
定义:一组进程或线程等待系统资源,而资源又被进程本身或者其他进程占用时就形成了死锁。 死锁产生的四个必要条件: 1)非抢占; 2)持有并等待; 3)互斥; 4)循环等待; 死锁避免: 在分配资源时检测分配该资源是否会造成死锁,如果会造成资源则拒绝分配并采取相应操作。死锁避免算法:如银行家算法。 死锁的消除: 最简单的消除死锁的办法是重启系统。更好的办法是终止一个进...原创 2013-03-26 15:17:40 · 133 阅读 · 0 评论 -
Java并发编程(五)--异步计算
表征异步计算的Future: Future接口有一个get方法,这个方法会执行到计算结束才返回,它可以被中断取消。从它的实现类来看FutureTask来看,其内部也有一个Sync的同步控制类,任务提交的时候会执行 void innerRun() { if (!compareAndSetState(0, RUNNING)) re...原创 2013-03-26 16:37:15 · 202 阅读 · 0 评论 -
Java并发编程(六)--Lock与Synchronized的比较
从代码层角度来说: Lock是基于在语言层面实现的锁,Lock锁可以被中断,支持定时锁,虽然我们总是在一个finally块中释放锁,但是其实我们可以很随意的释放锁,如果安全的话。Synchronized是基于JVM实现的,我们称之为对象的内置锁,Java中的每一个对象都可以作为锁。对于同步方法,锁是当前实例对象。对于静态同步方法,锁是当前对象的Class对象。对于同步方法块,锁是Synchon...原创 2013-03-27 20:13:31 · 576 阅读 · 0 评论