先說什么是線程同步,其實線程同步是說讓預定的先后順序去執行。當用戶進行一個調用時,在沒有得到結果之前,其它線程不能調用這個方法。
在工作中遇到這樣一個問題,有一張表,它的作用就是為其他表提供主鍵數據,如果多個用戶同時訪問這張表,那就存在共享資源的問題,簡單說就是容易產生臟數據,那這里就涉及到線程同步的問題。
利用synchronized是一種解決方案。分兩類鎖。
1.對類加鎖
將synchronized加到靜態方法上,對類加鎖。因為靜態方法屬于類
public static synchronized int generate(String tableName){
//方法體...
}
2.對對象加鎖
在范圍關鍵字后面去加入關鍵字synchronized;對某一塊代碼使用synchronized(this),這個方法只能一次只有一個線程進行調用,當方法執行完畢以后,其他線程才能進入。,例如synchronized(this)可以放到訪問數據的執行語句塊,保證了每次只有一個線程訪問。
public synchronized int generate(String tableName){
//方法體...
}
public int generate(String tableName){
//方法體....
synchronized(this) {
pstmt.executeQuery(); //執行語句
}
}