MySQL具有方便的功能:

SELECT GET_LOCK("SomeName")

这可用于为应用程序创建简单但非常具体的基于名称的锁。但是,它需要数据库连接。

我有很多情况,例如:

someMethod() {

// do stuff to user A for their data for feature X

}

简单地同步此方法是没有意义的,因为,例如,如果在此期间同时为用户B调用了此方法,则用户B无需等待用户A完成操作就可以开始操作,而只需为用户进行操作A和功能X的组合需要等待。

使用MySql锁,我可以执行以下操作:

someMethod() {

executeQuery("SELECT GET_LOCK('userA-featureX')")

// only locked for user A for their data for feature X

executeQuery("SELECT RELEASE_LOCK('userA-featureX')")

}

由于Java锁定基于对象,因此似乎需要创建一个新对象来表示此锁定的情况,然后将其放在某个位置的静态缓存中,以便所有线程都可以看到它。随后针对该情况进行锁定的请求将在高速缓存中定位锁定对象并获取其锁定。我试图创建类似这样的东西,但是锁缓存本身需要同步。而且,很难检测何时不再使用锁定对象,以便可以将其从缓存中删除。

我已经看过Java并发包,但是没有什么能够处理这样的事情了。有没有简单的方法可以实现此目的,还是我从错误的角度看待这个问题?

编辑:

为了明确起见,我不希望提前创建预定义的锁池,而是希望根据需要创建它们。我在想的一些伪代码是:

LockManager.acquireLock(String name) {

Lock lock;

synchronized (map) {

lock = map.get(name);

// doesn't exist yet - create and store

if(lock == null) {

lock = new Lock();

map.put(name, lock);

}

}

lock.lock();

}

LockManager.releaseLock(String name) {

// unlock

// if this was the last hold on the lock, remove it from the cache

}

java x锁_基于Java名称的锁?相关推荐

  1. java消费者模式_基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

  2. java楼盘管理系统_基于Java的楼盘销售管理系统的设计与实现

    科技信息SCIENCE & TECHNOLOGY INFORMATION2010 年 第 33 期 (上接第 456 页)3.3.1 在保卫目标上空 30-50m 的高度上,配置一定数量的球载 ...

  3. java path类_基于java Files类和Paths类的用法(详解)

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...

  4. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

  5. java 酒店系统_基于JAVA的酒店管理系统

    <基于JAVA的酒店管理系统>由会员分享,可在线阅读,更多相关<基于JAVA的酒店管理系统(31页珍藏版)>请在人人文库网上搜索. 1.酒店管理系统,专业: 姓名: 指导教师, ...

  6. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  7. java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)

    基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)(任务书,毕业论文12000字,程序代码,MySQL数据库) 本文分析了基于JAVA的雅思考试管理系统的设计与实现技术,结合实 ...

  8. java全文检索功能_基于Java的全文检索引擎简介

    Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基 ...

  9. java zip追加_基于Java向zip压缩包追加文件

    这篇文章主要介绍了基于Java向zip压缩包追加文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 有个需求,从某个接口下载的一个zip压缩包,往里 ...

最新文章

  1. 关于 eclipse startexplorer插件 快速打开文件夹
  2. BI国产化替代进入实质阶段,新产品新方案提高加速度
  3. CUDA入门需要知道的东西
  4. netcore 内存限制_[翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构
  5. 构建测试的体系化思维(进阶篇)
  6. Java!越来越像Kotlin了!!
  7. 互联网如何“武装”农民?
  8. Recoverit for Mac专业的数据恢复工具
  9. Ubuntu下怎么通过命令完成蓝牙的配对和连接
  10. python实现决策树算法
  11. 网站搜索引擎优化(SEO)服务合同书
  12. Element DatePicker 日期选择器限定日期选择范围
  13. 深度学习中处理类别不平衡问题主流方法总结
  14. win32 字体 api学习总结
  15. .考试倒计时44天!来提分啦!
  16. 敏捷测试团队组织构成
  17. 语音识别karas实现
  18. 利用接口实现墨盒纸张打印机
  19. 18天精读掌握《费曼物理学讲义卷一》 第4天 2019.6.17
  20. Tomcat无法自动解压缩webapps下的war包

热门文章

  1. java list拷贝_深入了解浅拷贝与深拷贝
  2. Android Sdk 安装配置
  3. kafka是存储到本地磁盘么_Kafka 中的消息存储在磁盘上的目录布局是怎样的?
  4. android studio aspectj使用,androidStudio中使用 AspectJ
  5. php nginx日志分析,如何通过NGINX的log日志来分析网站的访问情况,试试这些命令...
  6. 【技巧】搜狗输入法特殊技巧
  7. 【工作总结】银行的等级架构
  8. JavaScript学习笔记(一)—— 数据类型
  9. Java字符串找出4个字节长度的字符
  10. DbContext 和ObjectContext两者的区别