![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 160 阅读 · 0 评论 -
Java并发编程(二)--j.u.c锁机制
AQSjuc很多操作都是基于AQS(AbstractQueuedSynchronizer)不同于自旋锁,juc使用的是volatile机制的状态变量;内部也有一个阻塞线程的等待队列每个线程都被封装在一个Node结点中static final class Node { // 当前线程被取消 static final int CANCELLE...原创 2013-03-24 10:34:45 · 172 阅读 · 0 评论 -
Java并发编程(三)--并发数据结构
ConcurrentHashMap的设计实现为什么还需要ConcurrentHashMap,不是有了Hashtable吗。如果所有的事情都用Synchronized去解决,那么这个世界会变得很糟糕。ConcurrentHashMap最绝妙的地方是采用了锁分段技术,一种分而治之的策略,一个HashMap被分为了几个Segment,在每个Segment里面实行同步控制。对Concurr...原创 2013-03-24 20:33:16 · 141 阅读 · 0 评论 -
Java并发编程(四)--死锁
定义:一组进程或线程等待系统资源,而资源又被进程本身或者其他进程占用时就形成了死锁。死锁产生的四个必要条件:1)非抢占;2)持有并等待;3)互斥;4)循环等待; 死锁避免:在分配资源时检测分配该资源是否会造成死锁,如果会造成资源则拒绝分配并采取相应操作。死锁避免算法:如银行家算法。 死锁的消除:最简单的消除死锁的办法是重启系统。更好的办法是终止一个进...原创 2013-03-26 15:17:40 · 95 阅读 · 0 评论 -
Java并发编程(五)--异步计算
表征异步计算的Future:Future接口有一个get方法,这个方法会执行到计算结束才返回,它可以被中断取消。从它的实现类来看FutureTask来看,其内部也有一个Sync的同步控制类,任务提交的时候会执行void innerRun() { if (!compareAndSetState(0, RUNNING)) re...原创 2013-03-26 16:37:15 · 168 阅读 · 0 评论 -
Java并发编程(六)--Lock与Synchronized的比较
从代码层角度来说:Lock是基于在语言层面实现的锁,Lock锁可以被中断,支持定时锁,虽然我们总是在一个finally块中释放锁,但是其实我们可以很随意的释放锁,如果安全的话。Synchronized是基于JVM实现的,我们称之为对象的内置锁,Java中的每一个对象都可以作为锁。对于同步方法,锁是当前实例对象。对于静态同步方法,锁是当前对象的Class对象。对于同步方法块,锁是Synchon...原创 2013-03-27 20:13:31 · 504 阅读 · 0 评论