1

我有一堆线程,每个线程都会创建很多对象。在创建每个对象时,我需要检查现有对象的集合,以确保另一个线程尚未创建相等的对象。如果尚未创建相等对象,那么我需要将刚刚创建的对象添加到现有对象列表中。所以基本上我需要一个列表上的互斥锁。

我正在考虑做这样的事情,但我不知道在 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
        }
    }
}

PS 我认为这无关紧要,但这段代码在 Grails 服务中,我正在使用Grails Executor 插件来创建线程。

4

0 回答 0