功能:
1.实现跨客户端的多用户同步锁
2.实现多重嵌套的同步锁
说明:
这是本人7年Java生涯以来最钟爱的一段Java代码,其结构简洁,设计优雅,充分显示了作者对Java多线程机制的领悟;更重要的它可以很轻量级的嵌入到任何类的任何方法的任何代码段,来实现该代码段的线程同步。实在是经典中的经典啊!
public class TransactionLock {
 //并发事务锁对象,根据lockOwner,判定相应线程能否获得事务锁
 private Thread lockOwner = null;
 
 //锁深度,在同一synchronized事务内,事务锁被获取的次数
 private int lockDeep = 0;
 
 
 public TransactionLock() {
  super();
 }
 public synchronized void getLock(){
  while(tryGetLock() == false){
   try {
    this.wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 private synchronized boolean tryGetLock(){
  boolean rtval = false;
  
  if(this.lockOwner == null){
   this.lockOwner = Thread.currentThread();
   this.lockDeep = 1;
   rtval = true;
  }else if(this.lockOwner == Thread.currentThread()){
   this.lockDeep += 1;
   rtval = true;
  }
  
  return rtval;
 }
 
 public synchronized void freeLock(){
  if(this.lockOwner == Thread.currentThread()){
   this.lockDeep -= 1;
   if(this.lockDeep == 0){
    this.lockOwner = null;
    this.notify();
   }
  }
 }
 
 public Thread getLockOwner(){
  return this.lockOwner;
 }
 
 public synchronized boolean hasLocked(){
  return (tryGetLock() == false);
 } 
 
}
评论
dihin 2008-02-28
这段代码是Java Thread书上面的例子程序
tinywind 2008-02-27
我觉得早期的jdk可以使用这些代码,有了Concurrent包之后就可以放弃它了。
drbeckham 2008-02-27
写得很不错,不过如果从应用角度上来讲,JDK5.0引入的Concurrent包直接对操作系统底层操作,效率是最好的
linliangyi2007 2008-02-27
顺便说一下,这段代码是国外某大师作品,并非本人哒,在java1.2时代的杰作!
有时候从最基础的Java代码学习高级功能开发,能领悟到很多滴!
linliangyi2007 2008-02-27
galaxystar 写道
确实比较精简。

以楼主7年的开发经验,是否读过 AbstractQueuedSynchronizer ?

它的代码利用了很多像CAS,非阻塞,双向链表等技巧,再对锁获取数量做一些限制,实现了 ReentrantLock, Semaphore, CountDownLatch, FutureTask等多线程工具.

个人感觉已经非常优秀。


实际上在的JDK5.0中提供的新的线程同步控制类和机制都足够应付大部分的开发使用啦,这里之所以发布这个代码,是想同大家分享一下Java的优雅气质,呵呵。至于开发7年的说法是来形容我对这段代码的钟爱哒,没有炫耀的意思。JavaEye上牛人多得是,天外天,人外人!言语不周,大家海涵!
galaxystar 2008-02-26
确实比较精简。

以楼主7年的开发经验,是否读过 AbstractQueuedSynchronizer ?

它的代码利用了很多像CAS,非阻塞,双向链表等技巧,再对锁获取数量做一些限制,实现了 ReentrantLock, Semaphore, CountDownLatch, FutureTask等多线程工具.

个人感觉已经非常优秀。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

linliangyi2007
搜索本博客
我的相册
35e0b633-4f00-3a01-b508-0dde78e3293d-thumb
jasmine-008.JPG
共 135 张
存档
最新评论