当前位置: 首页 > 知识库问答 >
问题:

grails上的synchronized块在windows上工作,但在linux上不行

席宜修
2023-03-14

这个问题在下面的示例中重现。

class TestService {

private final Object $lock = new Object[0];

TesteSync incrementa() {

    synchronized ($lock) {
        TesteSync t = TesteSync.findById(1)
        t.contador++
        t.save(flush: true)

        Thread.sleep(10000)

        return t
    }
}

}

据我所知,发生此异常是因为多个线程试图保存同一个对象。这就是我使用同步块的原因。

    null
    null

共有1个答案

秦阳旭
2023-03-14

关于获得StaleObjectStateException的原因,您是正确的。

如果您正在寻找的是悲观锁定(在任何给定时间只允许一个事务访问数据),那么您可以使用域类lock()方法:

class TestService {
    static transactional = true

    TesteSync incrementa() {
        TesteSync t = TesteSync.lock(1)
        t.contador++
        return t.save()
    }
}

您可以在这里了解更多关于Grails悲观锁定的信息。

SomeDomainClass.get(1)
SomeDomainClass.findById(1)
 类似资料:
  • Windows---------------: Linux---------- 那么,什么是主要的原因是这个问题,看起来一切都好从其他的选择 Apache Maven 3.6.0(97C98EC64A1FDFEE7767CE5FFB20918DA4F719F3;2018-10-24T14:41:47-04:00)Maven主页:/home/user/tools/Maven/apache-maven

  • 我试图制作一个跨平台的JavaFX应用程序,它在Windows和OSX机器上工作得很好,但在Linux上不行。 jar是在Intellij思想中使用基本的JavaFX配置构建的。 有人帮忙吗?

  • 我有一段非常简单的Java代码,在那里我尝试从Java连接到我的Oracle DB。 在Windows下一切正常,但当我尝试在Ubuntu上运行时,我得到了一个错误。 我读了很多书,也试过很多解决方法。这是我的代码: 当我运行它时,我收到一个错误: 连接失败Java.sql.sqlRecoverable异常:IO错误:网络适配器无法在oracle.jdbc.driver.T4CConnection

  • 问题内容: 我想使用SFTP递归使用文件和子文件夹将整个目录结构从Linux服务器复制到使用Python 2.7的本地服务器(Windows和Linux)。 我能够ping服务器并使用WinSCP从同一台计算机下载文件。 我尝试了以下代码,但在Linux上运行良好,但在Windows上却无法运行。 我试过,,,全部给了我同样的错误,检查权限也是如此。 问题答案: 实际上,pysftp 在Windo

  • 问题内容: 我有一个grails应用程序,它依赖于服务中的同步块。当我在Windows上运行它时,同步可以按预期工作,但是当我在ams linux上运行时,会收到StaleObjectStateException。 在下面的示例中重现该问题。 } 据我了解,发生此异常是因为多个线程正在尝试保存同一对象。这就是为什么我使用同步块。 Linux Java: Java版本“ 1.7.0_85” Open

  • 这是我的密码: 我已经安装了Python3(MacOSX),并将其与virtualenv一起使用。这段代码在2.7中运行良好,但在python3中不起作用。5.它总是给出