标签:java thread-safety mutex nonblocking pool
我并不熟悉Java的并发库,因此对于以下问题,我通常只编写自己的互斥锁管理代码,但我担心随着servlet流量的增加,互斥体会降低系统速度.
第一个需要是使用一组有限的String键,我需要先查找,否则创建并发布一个昂贵的对象.这意味着在一个天真的实现上有一个全局互斥.还有更好的东西吗?
第二个需要是每个昂贵的对象都有一个等效工人的软池,其中任何一个都足以执行.这些工人的创建成本比工厂的工厂便宜,但它们仍然很昂贵,需要汇集.一个简单的实现将为每个工厂安装一个互斥锁,并从软缓存中检出一个工作人员,或者如果没有可用的话就创建它.但是由于很多servlet调用使用相同的工厂(可能),这个互斥锁也会成为一个争论的焦点.
当然,对于2个互斥体,我绝对可以最大限度地减少在同步语句中花费的时间,但我在两种情况下都在寻找更好的东西.也许两者都有一个非阻塞的解决方案?
安迪
解决方法:
对于第一部分:而不是将昂贵的对象直接放入HashMap,而是创建一个创建起来便宜的简单包装器.然后,您基本上在包装器getExpensiveObject()方法中按需创建昂贵的对象 – 尽管如果这是首选的话,显然可以立即触发创建.在任何一种情况下,你都必须同步get方法,但是这可以通过双重检查锁定来廉价地完成 – 通常我们只是用volatile读取替换普通读取并且仅在创建对象时具有昂贵的同步.
这假设您正在使用各种类型的ConcurrentHashMap,因为我们需要putIfAbsent或一些等效方法才能工作(我们不想用空包装器替换现有的昂贵对象)
现在没时间考虑第二个问题,也许以后.
标签:java,thread-safety,mutex,nonblocking,pool 来源: https://codeday.me/bug/20190709/1417038.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。