Java 线程并发问题

Java 线程并发问题,java,sql,multithreading,hibernate,thread-safety,Java,Sql,Multithreading,Hibernate,Thread Safety,列为“count”的表。它有主键“rowID”。现在我想获取这个计数,将它增加1并更新它。我有一个场景,其中多个实例/线程尝试更新相同的列计数 例如,3个螺纹t1、t2、t3(不同步)。t1获取计数(比如0)并递增和更新。现在计数是1。现在有可能t2和t3同时尝试访问计数,然后出现问题 请建议正确的方法来处理这种情况 这就是数据库序列/锁的用途。你应该使用它们。 但是,如果您想使用线程同步,您已经将“获取更新代码”放在单个同步块或方法中 这两种方法中的任何一种都能达到你的目的 synchroni

列为“count”的表。它有主键“rowID”。现在我想获取这个计数,将它增加1并更新它。我有一个场景,其中多个实例/线程尝试更新相同的列计数

例如,3个螺纹t1、t2、t3(不同步)。t1获取计数(比如0)并递增和更新。现在计数是1。现在有可能t2和t3同时尝试访问计数,然后出现问题


请建议正确的方法来处理这种情况

这就是数据库序列/锁的用途。你应该使用它们。 但是,如果您想使用线程同步,您已经将“获取更新代码”放在单个同步块或方法中

这两种方法中的任何一种都能达到你的目的

synchronized void method(){

        // fetch
        // increment
        // update

    }

    void method(){

        synchronized (obj) {

            // fetch
            // increment
            // update

        }

    }

您使用的是什么数据库软件?这应该在那里处理。@rossdew说的。让争议裁决委员会来处理。如果你不能。在修改行时锁定该行。将事务隔离配置为至少读取已提交级别,并将操作包装到transaction@RossDrew我正在使用oracle11g