【发布时间】:2016-08-12 13:41:51
【问题描述】:
我有一个方法:
private synchronized Long generateID (Short company) throws Exception {
IDDAO iDDAO = SpringApplicationContext.getBean (IDDAO.class);
ID iD = iDDAO.findByNaturalKey (new IDNatKey (company);
if (iD != null) {
// Check if ID has reached limit, then reset the ID to the first ID
if (iD.getLatestIDno ().longValue () == iD.getLastIDno ().longValue ()) {
iD.setLatestIDno (iD.getFrstIDno ());
}
// Get next ID
iD.setLatestIDno (iD.getLatestIDno () + 1);
// update database with latest id
iDDAO.update (iD);
return iD.getLatestIDno ();
}
}
在这段代码中,我正在更新 ID iD.setLatestIDno(iD.getLatestIDno() + 1) 的值。这是以同步方式完成的,因此从多个线程访问时它永远不会重复。
我的问题是如果使这个方法同步会阻止其他线程访问它?还是其他线程可以从不同的对象访问它?那么它应该是静态的吗?
代码是这样使用的
Long check = generateID (123);
谢谢
【问题讨论】:
-
有人可以通过编辑我的代码来告诉我如何使用 AtomicLong 中的 incrementAndGet() 吗?
标签: java multithreading concurrency synchronized