MySQL と Java スレッドの動作に非常に戸惑っています。これを同期済みとして宣言すると、取得した結果が衝突しています。これは、複数のスレッドが同時に同じ関数にアクセスしていることを意味します。このコード セグメントは実行可能なクラスにあります。MachineID は、for ループで呼び出された順序のスレッド ID です。(これは 1 から 100 までの数字です)。
表は必要な情報ではないと思います
これは私が得る出力です
144 18
144 17
144 11
144 13
144 10
144 9
public synchronized int getRow() throws SQLException{
String query="SELECT * FROM Searches WHERE checked='0'";
ResultSet results = this.database.executeQuery(query);
int id=0;
if(results.next()){
id=results.getInt(1);
System.out.println(id+" "+this.machineID);
query = "UPDATE Searches SET checked='1' WHERE ID_num='"+id+"'";
System.out.println(this.database.executeUpdate(query));
}
return id;
}
public void run() {
int id=getRow();
if (id!=0) {
}
}
ここでスレッドを呼び出します
for (int i = 0; i < verifier.length; i++) {
verifier[i]=new Thread(new Verifier(main.database,i+1));
verifier[i].start();
}