我有一個程序(由於IM在VM中運行的程序在我的情況2),可以自動生成取決於CPU的內核的數量線程2線程在同一時間訪問到同步功能
我有一個名爲CREATETABLE至極函數創建一個表,如果它不存在,問題是,我有多個線程,因此IF statment可能是unusefull,我試圖用同步,但我有同樣的結果
public synchronized void createTable(Utils utils, String tableName, RowSerializable row) {
if(!utils.getClient().tableExists(tableName)) {
this.table = utils.generateTable(tableName, row);
this.fieldsNames = utils.getNamesOfColumns(table);
}
}
任何想法?
你能提供更多細節嗎?如果在線程之間共享基礎對象的同一實例,則同步方法就足夠了。是你的情況嗎? – davidxxx
您創建了多少個包含此代碼的對象?同步將在* object *級別。如果每個線程創建一個單獨的對象,則不會有同步。 –
你是從兩個不同的對象調用方法嗎?如果在這種情況下是,它將鎖定兩個不同的對象,因此將允許兩個線程訪問此方法代碼。或者採取類級鎖。 (使該方法爲靜態) –