系統有個 table紀錄人員編號, entity為
public Class Foo {
private String prefix1;
private String prefix2;
private int serial;
}
有個取號程式會依(prefix1, prefix2)去取得目前流水號,並將 tablek的 serial加1.
為了避免多個 thread搶序號問題, 取號的 method(select and update table)加上了 synchronized.
但卻發現依然出現 serial重複的問題.
測了半天才發現是因為我們用 hibernate.
第二個 thread load entity時 return的是第一個 thread load後的 cache.
加上 session.clear()就解決了.
害我一直很擔心如果真的是 synchronized失效,不知道要加多少班解決這個問題了.
沒有留言:
張貼留言