目录 1.引子 2.AQS架构设计原理 3.AQS源码实现 4.简单应用 5.总结 正文分割线 一、引子 Doug Lea在JSR166中建立了一个小框架,AbstractQueuedSynchronizer同步器框架(AQS)。这个框架为构造同步器提供一种通用的机制,并且被j.u.c包中大部分类使 ...
分类:
其他好文 时间:
2017-07-26 22:15:15
阅读次数:
346
ReenTrantLock可重入锁(和synchronized的区别)总结 可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的 ...
分类:
其他好文 时间:
2017-07-20 16:25:25
阅读次数:
565
1 . 多个线程访问多个对象JVM会创建多个锁。2 . 静态方法是以类为单位进行同步的——对于同一个类中的所有静态方法,在同一时间内,只允许有一个线程执行其中的一个静态方法,其余想要进入这些方法的线程都必须挂起等待。非静态方法是以对象为单位进行同步的。3 .假设现有两个线程A和B,一个object对 ...
分类:
编程语言 时间:
2017-07-17 20:21:28
阅读次数:
180
可重入互斥锁: Lock lock = new ReentrantLock() lock.lock(); ... lock.unlock(); 信号量: Semaphore semaphore = new Semaphore(3); semaphore.acquire(); ... semaphor ...
分类:
其他好文 时间:
2017-07-16 00:08:49
阅读次数:
324
synchonrized和lock的区别 synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。是原生语法层面的互斥锁。lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个... ...
分类:
其他好文 时间:
2017-07-13 21:47:31
阅读次数:
154
也就是说,如果condition构造函数lock参数为空的话,会自动创建可重入锁RLock。 可重入锁RLock,同一线程可以多次获取(the same thread may acquire it again without blocking)。 ...
分类:
编程语言 时间:
2017-07-03 23:52:31
阅读次数:
263
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁 2、自旋 ...
分类:
编程语言 时间:
2017-06-28 23:21:08
阅读次数:
226
ReentrantLock (重入锁) 特点 1可重入(可以多次加锁,多次解锁) 2可限时(可以避免死锁,如果在给给定时间内没有获取到锁,那么就去做其他事情 并且释放自己的资源) 3公平锁(能够按照先后顺序去获取锁 但是会因影响性能) Semaphore(信号量) CountDownLatch (计 ...
分类:
其他好文 时间:
2017-06-27 20:05:13
阅读次数:
129
在C函数中保存状态:registry、reference和upvalues C函数能够通过堆栈来和Lua交换数据,但有时候C函数须要在函数体的作用域之外保存某些Lua数据。那么我们想到全局变量或static变量,这样做的缺点是:(1)为Lua设计C函数库时,导致不可重入。(2)不是全部的Lua值都能 ...
分类:
其他好文 时间:
2017-06-24 21:48:04
阅读次数:
147
19.实现线程同步的方式,以及区别 为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 同步的方式 1 ...
分类:
编程语言 时间:
2017-06-19 22:14:46
阅读次数:
205