#Currency

深入浅出 Java Concurrency (8): 加锁的原理 (Lock.lock)

接上篇,这篇从Lock.lock/unlock开始。特别说明在没有特殊情况下所有程序、API、文档都是基于JDK6.0的。publicvoidjava.util.concurrent.locks.ReentrantLock.lock()获取锁。如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为1。...

深入浅出 Java Concurrency (7): 锁机制 part 2 AQS

 在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复杂的一个基础类:java.util.concurrent.locks.AbstractQueuedSynchronizer。 AQSAbstractQueuedSynchronizer,简称AQS,是J.U.C最复杂的一个类...

深入浅出 Java Concurrency (6): 锁机制 part 1 Lock与ReentrantLock

 前面的章节主要谈谈原子操作,至于与原子操作一些相关的问题或者说陷阱就放到最后的总结篇来整体说明。从这一章开始花少量的篇幅谈谈锁机制。上一个章节中谈到了锁机制,并且针对于原子操作谈了一些相关的概念和设计思想。接下来的文章中,尽可能的深入研究锁机制,并且理解里面的原理和实际应用场合。尽管synchronized...

深入浅出 Java Concurrency (5): 原子操作 part 4 CAS操作

 在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先...

深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则

在这个小结里面重点讨论原子操作的原理和设计思想。由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念。在JavaConcurrencyinPractice中是这样定义线程安全的:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个...

深入浅出 Java Concurrency (3): 原子操作 part 2

在这一部分开始讨论数组原子操作和一些其他的原子操作。AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API类似,选择有代表性的AtomicIntegerArray来描述这些问题。intget(inti)获取位置i的当前值。很显然,由于这个是数组操作,就有索...

深入浅出 Java Concurrency (2): 原子操作 part 1

  从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始)。很多情况下我们只是需要一个简单的、高效的、线程安全的递增递减方案。注意,这里有三个条件:简单,意味着程序员尽可能少的操作底层或者...
首页上一页12下一页尾页