线程 - 并发问题

时间:2014-09-09 11:51:33

标签: java sql multithreading hibernate thread-safety

表格列#34;计数"。它有主键" rowID"。现在我想获取此计数,将其递增1并更新它。我有一个场景,多个实例/线程尝试更新相同的列 - 计数。

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

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

1 个答案:

答案 0 :(得分:1)

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

这两种方法中的任何一种都可以达到您的目的。

synchronized void method(){

        // fetch
        // increment
        // update

    }

    void method(){

        synchronized (obj) {

            // fetch
            // increment
            // update

        }

    }