相關的問題: Java Threading with MYSQL puzzled荒誕的Java多線程和MySQL的syncrhonization
計數器INT,是同步的,在函數調用的executeQuery不同步。 結果我得到
計數器:從MYSQL 1個
行:1
計數器:從MySQL 2
行:1
計數器:3
行從MYSQL:1
Expect編輯輸出 - >來自MYSQL的行:應該與計數器相同
所有線程同時運行第一個查詢。因此他們得到相同的結果編號。但是它們會同步迭代計數器。對我來說這是荒謬的。此行爲是否記錄在案?我怎樣才能繞過它? Verifier.java
public void run() {
int id = 0;
String query = "SELECT ID_num FROM Searches WHERE checked='0'";
ResultSet results;
synchronized (this.database) {
results = this.database.executeQuery(query);
if (results.next()) {
id = results.getInt(1);
query = "UPDATE Searches SET checked='1' WHERE ID_num='"
+ id + "'";
this.database.counter++;
System.out.println(this.database.counter);
System.out.println(id);
}
}
}
Core.java
for (int i = 0; i < verifier.length; i++) {
MySQL database=new MySQL();
verifier[i]=new Thread(new Verifier(database,i+1));
verifier[i].start();
}
MySQL.java
public class MySQL{
int counter=0;
....
}
您的代碼原樣意味着您的更新查詢,增量和sysout將在3個不同的對象鎖上同步,而不是1。 – shazin