質問に関連: Java Threading with MYSQL puzzled
カウンター int は同期されますが、executeQuery への関数呼び出しは同期されません。私が得ている結果
カウンター: 1
MYSQL からの行: 1
カウンター: 2
MYSQL からの行: 1
カウンター:3
MYSQL からの行: 1
予期される出力 -> MYSQL からの行: カウンターと同じである必要があります
すべてのスレッドは、最初のクエリと同時に実行されます。したがって、それらは結果の同じ ID を取得します。ただし、それらはカウンター反復のために同期します。私にはこれはばかげています。この動作は文書化されていますか? どうすればバイパスできますか?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;
....
}