我有一堆线程,每个线程都会创建很多对象。在创建每个对象时,我需要检查现有对象的集合,以确保确保另一个线程尚未创建相等的对象。如果尚未创建相等的对象,那么我需要将刚刚创建的对象添加到现有对象列表中。所以基本上我需要一个列表上的互斥锁。
我正在考虑做这样的事情,但我不知道在Groovy中是否有更好的方法:
import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReentrantLock
class FooService {
private final ReentrantLock lock = new ReentrantLock()
private def existingObjectList = []
def longRunningProcess(params) {
// create a bunch of threads that will all use someMethod
}
private def someMethod(def propertiesMap) {
def obj = new Foo(propertiesMap) // create an object
lock.lock() // lock the existing object list
try {
if(!existingObjectList.contains(obj)) {
existingObjectList.add(obj)
}
} finally {
lock.unlock() // unlock the existing object list
}
}
}
P.S。我认为这不重要,但此代码在Grails服务中,我使用Grails Executor plugin创建线程。