相关的问题: 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