有没有一种Groovy方式可以使方法同步?

12

我正在使用Groovy 1.7.2。有些方法需要同步,是否有更加Groovier的方法来实现这一点,或者我必须遵循在方法前面放置synchronized关键字的Java方式?

e.g : synchronized static def  Map getMap(def fileName) { }
2个回答

17

如果您可以升级到Groovy 1.7.3,您可以使用Synchronized AST转换。您可以在实例和静态方法上使用该注释。该注释将在您的类中创建一个锁变量(或者您可以使用现有变量),并且代码将在该锁变量上同步。

应优先使用synchronized块而不是将关键字添加到方法中。如果在方法上使用synchronized关键字,则会在this上同步,这意味着所有想要访问类中任何方法的其他线程都必须等待锁再次空闲。

import groovy.transform.Synchronized

class YourClass {
    @Synchronized
    static Map getMap(def fileName) {
        ...
    }
}

升级目前不在计划之内,但提供的信息绝对非常有帮助,这意味着在 Groovy 1.7.2 中我可以使用 Java 的 synchronized 风格。 - anish

2
自从Groovy 1.7.3版本以来,我们有了一个新的AST转换:@Synchronized。请参考文档获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接