功能:
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);
}
}
分享到:
相关推荐
优雅的fs(graceful-fs)是Node.js生态系统中一个重要的模块,它作为原生fs模块的一个增强版本,提供了一系列的改进和优化,旨在提高文件系统的操作性能和稳定性。在Node.js开发过程中,文件系统操作是不可或缺的一...
`Go-graceful`是一个专门设计用于处理HTTP服务器的优雅重启和关闭的Go库。它允许你在不中断现有连接的情况下进行服务的更新或重启,这对于提供不间断服务的在线应用至关重要。零宕机时间的实现是通过保持旧服务器...
优雅图(Graceful Graph)是图论中的一个概念,它源于数学和计算机科学,特别是网络流和图遍历的问题。这个概念是由美国数学家Edward G. Kolaitis在1970年代提出的,目的是研究图的标号特性。在英特尔线程挑战赛3月...
优雅的前端开源库——`graceful-readlink`是一个针对`fs.readlink`进行优化的模块,主要用于解决Node.js在处理符号链接时可能出现的问题。在Node.js原生的`fs`模块中,`fs.readlink`函数用于读取符号链接(symbolic ...
`graceful-cache`是一个针对Laravel的缓存存储库的包装器,其目标是提供一种更加优雅、灵活的方式来管理你的应用缓存。在这个项目中,开发者可以更好地控制缓存的生命周期,提高应用的效率。 `graceful-cache`的...
`graceful-ncp`是一个专门为前端开发者设计的开源库,它实现了优雅的、异步的文件和目录的递归复制功能。这个库的核心目标是提供一种更稳定、更易用的方式来处理文件系统操作,特别是在处理大量文件或复杂目录结构时...
"优雅地杀死"一个进程意味着按照预定的顺序和方式结束进程,而不是简单地强制停止,这有助于避免数据丢失和系统不稳定。graceful-kill库就是为了解决这个问题,它允许开发者安全地关闭子进程,确保所有待处理的任务...
本文将详细讲解如何将一个Java程序打包并发布为Windows后台服务,同时提供一个具体的示例。 首先,我们需要理解Java服务的概念。在Windows操作系统中,服务是一种在没有用户界面的情况下运行的特殊类型的应用程序,...
在Java中实现可扩展的IO操作是一个复杂且重要的主题,尤其是对于需要处理大量并发连接的服务器应用程序。本文将介绍Scalable IO in Java一书,其作者是Doug Lea,他同时也是Java并发编程领域的权威。在这本书中,Lea...
文件标题和描述提到了Java中的可伸缩IO(Scalable IO in Java),文档的标签为“nio”,即Java的非阻塞IO(New I/O),这是Java在1.4版本中引入的一个新的包java.nio,为IO提供了一种新的方式。 首先,文档提到了...
控制优雅的应用程序 优雅的应用程序可以用信号来控制。 主进程支持以下信号 期限/INT 快速关机 放弃正常关机 合肥 重启工人 启动新的工作进程 优雅关闭旧的工作进程 USR2 升级可执行文件(启动新的主进程和工作进程...
2. **Worker的生命周期**:一个工作进程一旦启动,就会持续运行,不断从队列中拉取任务。当收到停止信号时,标准的工作进程会立即停止,可能导致正在处理的任务中断。 3. **优雅关闭(Graceful Shutdown)**:在...
express-graceful-exit, 为了得到零停机,优雅地退出 Express express-graceful-exit具有零停机时间的组件为 node.js 使用 Express 部署。 它是为 3. X, 开发的,因此它可能需要与 Express 2.x 兼容。这个模块最初是...
在实际开发中,为了兼容各种浏览器和提升用户体验,开发者通常会结合使用AJAX和其他技术,例如使用渐进增强(Progressive Enhancement)或优雅降级(Graceful Degradation)策略,确保即使在JavaScript禁用或不支持...
1. **发送Hard Reset**:当一个BGP发言人决定不执行优雅重启而是立即关闭会话并重新建立新会话时,它可以发送一个包含特定子代码的BGP Cease NOTIFICATION消息,表明这是一个硬重启。 2. **接收Hard Reset**:接收端...
当所有路由发送完毕后,会发送一个空的Update作为End-of-RIB Marker,表明已发送所有路由信息,这是GR正常结束的一个条件。 2.4 Graceful Restart Capability: GR Capability是BGP Open报文中新增的一项能力,用于...
Mastering the functional style of programming can help you tackle the demands of modern apps and will lead to simpler expression of complex program logic, graceful error handling, and elegant ...
`graceful-fs-extra`是一个针对Node.js环境的`fs`模块扩展库,它在原生`fs`模块的基础上增加了一些实用功能,并提供了更优雅的错误处理机制,使得文件操作更加高效和稳定。本文将深入探讨`graceful-fs-extra`库的...
在Spring Boot应用中,优雅停机(Graceful Shutdown)是一个重要的实践,特别是在生产环境中,它确保应用程序在停止服务之前能够完成正在进行的任务,清理资源,并且不会立即拒绝新的请求。这有助于避免数据丢失、...