线程Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。
也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本...
分类:
编程语言 时间:
2016-05-12 17:08:08
阅读次数:
270
ReentrantLock可重入锁,使用比synchronized方便灵活,可作为替代使用:
1.支持公平/不公平锁;
2.支持响应超时,响应中断;
3.支持condition;
ReentrantLock实现了Lock接口,内部使用static类继承AQS实现独占式的api来实现这些功能,使用AQS的state来表示锁可重入次数:
之前学习AQS的时候说过请求和rele...
分类:
其他好文 时间:
2016-05-12 14:47:41
阅读次数:
189
AQS的conditionObject实现类似object的wait/notify/notify的功能,功能大概是:
1.object维护一个监视器和一个等待队列,condition对于一个lock可以有多个condition,对于每个condition维护一个条件队列;
2.提供wait/signal/signalall功能。
来个入门demo:
public class Conditi...
分类:
其他好文 时间:
2016-05-12 14:41:04
阅读次数:
217
上一次学习了ReetrantLock,是对AQS独占模式的,这次学习CountDownLatch,是共享模式api的实现。人生不死,学无止境。先看个demo吧:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest {
private static CountDownLatch ...
分类:
其他好文 时间:
2016-05-12 12:25:20
阅读次数:
173
排它锁概念: Exclusive Locks,被称为X锁,写锁,独占锁.如果事物T1对数据对象O1加上了排它锁,那么在整个加锁期间,只允许事务T1对O1进行读写操作,其他事务必须等到T1释放锁后才能进行操作.在单机环境中,JDK提供了synchronized关键字和ReentrantLock 重用锁 ...
分类:
其他好文 时间:
2016-05-10 09:42:42
阅读次数:
147
AQS中一定要记住2点:
1.处理流程:
if(!请求成功)
加入队列
2.请求是对state的判断,AQS不关心你state表示什么,你可以表示状态也可以表示数量,由子类实现对请求的判断。将规则的判断和规则的处理分离,有点像模板模式。
先想想什么是独占什么是共享,举个栗子:独占就像大家拿号去排队体检,你拿号了发现前面还有n个人,没办法,等吧,然后你前面的人体检完了,医生就说,你通知下一...
分类:
其他好文 时间:
2016-05-07 10:05:20
阅读次数:
133
AbstractQueuedSynchronizer(下面简称AQS),javadoc说明: Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on first-in-first-out (FIFO) wait que...
分类:
其他好文 时间:
2016-05-07 09:11:08
阅读次数:
240
Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。
此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。
使用生产者和消费者为例!!!import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
i...
分类:
编程语言 时间:
2016-05-07 07:28:48
阅读次数:
176
花了整整一天时间,将Lucene5中有关索引的常见操作进行了简单封装,废话不多说,上代码:
package com.yida.framework.lucene5.util;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.locks.Lock...
分类:
Web程序 时间:
2016-05-03 18:12:05
阅读次数:
193
step1:查看1.1 Mysql命令行里输入“show engines;”查看innoddb数据引擎状态,1.2 show variables “%_buffer%”里查看innodb_buffer_pool_size的数值,默认是8M(太小,需要改大一点!)step2:找配置文件,修改innod... ...
分类:
数据库 时间:
2016-04-30 20:53:36
阅读次数:
328