java中的synchronized方法的问题

jit*_*dra 0 java database multithreading synchronized

我在Java中实现了以下实现,我尝试使用synchronized方法:

class dbAccess{  
     public synchronized void getGUID(){  
           counter=/*Access last count from txn_counter table */
           /*Insert a unique value to txn_counter table based on the acquired value of counter */ 
           /*Insert new counter value to GUID_log table */
     }  
}
Run Code Online (Sandbox Code Playgroud)

/**/之间的部分代表一些sql查询.该实现有10个线程.我希望每次返回的计数器值都是唯一的.但碰巧多次运行会返回相同的计数器值.

如果我做错了,你能指出吗?而且,这是正确的方法吗?

Mic*_*les 5

仅仅因为它在java中是同步的,并不意味着它在数据库上是同步的.此方法需要在启用了读锁定的数据库事务中运行.

  • 在事务中运行的最重要部分是在下一个线程读取"txn_count的最后一个计数"之前,需要将txn_counter中更改的值提交到数据库. (2认同)