前一篇博客简单介绍了ReentrantLock的定义和与synchronized的区别,下面跟随LZ的笔记来扒扒ReentrantLock的lock方法。我们知道ReentrantLock有公平锁、非公平锁之分,所以lock()我也已公平锁、非公平锁来进行阐述。首先我们来看ReentrantLock的结构【图来自Java多线程系列–“JUC锁”03之 公平锁(一)】:从上图我们可以看到,Reent...
分类:
编程语言 时间:
2015-08-19 17:01:00
阅读次数:
180
在上一篇博客中,我们学会了用ReentrantLock来控制线程访问同一个数据,防止出现Race Condition。这一次呢,我们继续深入的学习,学习一下java中的条件对象,条件对象在多线程同步中用到的比较多。首先,我们来介绍一下临界区。临界区:在同步的程序设计中,临界区指的是一个访问共用资源的程序片段,而这些共用资源又具有无法同时被多个线程访问的特性。 当有线程进入临界区时,其他线程或是进程必...
分类:
编程语言 时间:
2015-08-19 09:31:59
阅读次数:
211
CopyOnWriteArrayListget方法与ArrayList没有什么变化。但是凡是需要改动Array的方法都使用了ReentrantLock进行加锁,然后每次的修改操作都是产生一个新的list,然后setArray设置回去,包括add,set,remove等操作都是。例如add方法,并没有...
分类:
其他好文 时间:
2015-08-17 15:17:05
阅读次数:
280
位置: 建议127: Lock与synchronized是不一样的首先在概念上纠正这一篇内容:援引Java源码中关于ReentrantLock的开篇说明:* A reentrant mutual exclusion {@link Lock} with the same basic* behavior...
分类:
编程语言 时间:
2015-08-17 09:54:41
阅读次数:
149
在上一篇博客中,我们讨论了Race Condition现象以及它产生的原因,现在我们知道它是不好的一种现象了,那么我们有什么方法避免它呢。最直接有效的方式就是放弃多线程,直接改为使用单线程但操作数据,但是这是不优雅的,因为我们知道有时候,多线程有它自己的优势。在这里我们讨论两种其他的方法——锁对象和条件对象。
锁对象
java SE5.0之后为实现多线程的互斥引入了ReentrantLock类...
分类:
编程语言 时间:
2015-08-17 08:48:20
阅读次数:
400
package?wj;
import?java.util.concurrent.locks.Condition;
import?java.util.concurrent.locks.Lock;
import?java.util.concurrent.locks.ReentrantLock;
/**
?*?Created?by?wangjia?.
?*?Date:20...
分类:
其他好文 时间:
2015-08-12 19:59:52
阅读次数:
245
概要接上一篇文章,练习修改锁的公平性,和在所中使用条件。修改锁的公平性ReentrantLock /**
*构造一个锁对象,默认为非公平锁
*/
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}根据Reentrant...
分类:
编程语言 时间:
2015-08-11 23:26:52
阅读次数:
243
public static void main(String[] args){ doSync(); } private static void doSync() { MyThread myThread = new MyThre...
分类:
编程语言 时间:
2015-08-11 23:01:54
阅读次数:
404
synchronized是属于jvm层面的,如果遇到异常,jvm会自动释放锁.lock锁的释放是需要程序员操作,如果不释放就会产生死锁在竞争不激烈的情况下,偶尔会有同步的情况发生,如果用synchronized会好一点,如果竞争很激烈的情况下,使用reentrantLock会好一点.package....
分类:
其他好文 时间:
2015-08-11 22:53:24
阅读次数:
177
案例一:使用多线程完成三个窗口卖票(不能出现重复卖票以及负数票)
卖票程序SellTicket 这里使用Lock类中的方法实现加锁和释放锁!
package cn.itcast.thread2;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public cl...
分类:
编程语言 时间:
2015-08-11 21:33:58
阅读次数:
273