并发收集

时间:2013-08-29 16:04:53

标签: multithreading grails concurrency groovy java.util.concurrent

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

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

0 个答案:

没有答案