Java多线程程序非阻塞式锁定实现
上一篇 /
下一篇 2012-06-21 10:55:42
/ 个人分类:Java
Java对
多线程程序的锁定已经有良好的支持,通常使用synchronized修饰一个方法或者一段代码。但是有一个问题,多个线程同时调用同一个方法的时候,所
有线程都被排队处理了。该被调用的方法越耗时,线程越多的时候,等待的线程等待的时间也就越长,甚至于几分钟或者几十分钟。对于Web等对反应时间要求很
高的系统来说,这是不可以接受的。本文就介绍一种自己实现的锁定方法,可以在没有拿到锁之后马上返回,告诉客户稍候重试。g]
A~9d}P/H0 某一段程序同一时刻需要保证只能单线程调用,那么策略很简单,最先到的线程获取锁成功,在它释放之前其它线程都会获取失败。首先要构造一个全局的系统锁仓库,代码如下:51Testing软件测试网 Tt)J!K [#V?%{
?9W@:Y?+y
51Testing软件测试网x+g]a4s W/*51Testing软件测试网
P4B'j
E j4YP4M\Hc
* LockStore.java 2012-5-1551Testing软件测试网)P'd [^*^){p(a{'I1L
*/
p8i)n)ZT#a'Mx^rz051Testing软件测试网.H7Jb&rm_import java.util.Date;
B
iI g6m^P`k1z0import java.util.HashMap;
~o:Qxq{'^Lil
G0import java.util.Map;51Testing软件测试网.X!Z8C)j {9Tbx
_/V{/m@#a
t"F$H`0/**51Testing软件测试网'W~s!I K2EL]
* 公用的内存锁仓库. 分为获取锁和释放锁两种操作。51Testing软件测试网9p!Zf*L ]e
*51Testing软件测试网#`~kOnj}lt
* @version 1.051Testing软件测试网BDN4tUtw
*/