与问题相关: Java Threading with MYSQL 不解
计数器 int 是同步的,对 executeQuery 的函数调用是不同步的。我得到的结果
计数器:1
来自 MYSQL 的行:1
计数器:2
来自 MYSQL 的行:1
计数器:3
来自 MYSQL 的行:1
MYSQL 的预期输出-> 行:应该与计数器相同
所有线程同时运行第一个查询。因此他们得到相同的结果ID。但是,它们为计数器迭代同步。对我来说这是荒谬的。这种行为是否记录在案?我怎样才能绕过它?验证器.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);
}
}
}
核心.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;
....
}