[英]Non-blocking synchronizers?
Java中有“非阻塞锁”这样的东西吗? 通过这种方式,我的意思是有一种方法来保留同步的属性(原子保护和内存可见性 - 后者可以在以后出现,但第一个是我现在正在寻找的最重要的东西)但是还有多个线程没有必须等待对象的监视器?
我正在寻找 - 只是为了清楚 - 不是CAS操作,而是一个实现,比如, synchronized
关键字,或ReentrantLock
,它的工作方式就像Semaphore
BUT一样具有实际的同步语义,不会阻止线程执行某些操作像调用getter和setter这样的动作。
我想不出任何内置的东西。
但您可以使用tryLock
确定是否可以获取Lock
并执行同步操作,或者,如果无法获取Lock
,则执行非同步操作。
Lock l = ...
if(l.tryLock()) {
try {
// do your synchronized action
} finally {
l.unlock();
}
} else {
// welp, we couldn't get the lock.
// do some local work.
}
您可以查看锁定条带技术(在concurrenthashmap中使用)以查看它是否满足您的需求。 他们的基本想法是你将结构分成若干段,如果一个线程正在修改一个段,你仍然可以从其他段中读取。
您还可以尝试使用CopyOnWriteArrayList,如果要修改数组,则可以创建副本,并在修改数组时将其用于任何读取操作。 这里的问题是您不能保证获得数据的最新更新
上述两种方法都用于构建并发系统而不是同步系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.