Mysql 创建同时访问数据库的多个线程
我试图在各种留言板上找到解决我问题的方法。然而,我遇到了困难。我试图在Mysql INNODB表上重新创建数据库“LockWait Timeout”上发生的问题。(有关我试图解决的问题的信息,请转到:)我已经缩小了问题的范围,并且我有了解决方案。但我无法在测试环境中重新创建问题,以便测试我的解决方案 这是我的密码:Mysql 创建同时访问数据库的多个线程,mysql,multithreading,Mysql,Multithreading,我试图在各种留言板上找到解决我问题的方法。然而,我遇到了困难。我试图在Mysql INNODB表上重新创建数据库“LockWait Timeout”上发生的问题。(有关我试图解决的问题的信息,请转到:)我已经缩小了问题的范围,并且我有了解决方案。但我无法在测试环境中重新创建问题,以便测试我的解决方案 这是我的密码: public static void main(String[] args) { System.out.println("Programm Starting
public static void main(String[] args) {
System.out.println("Programm Starting");
int numberOfthreads = 2;
for(int x = 1; x <= numberOfthreads; x++){
//Create the object UpdateClass
// Create the Runable object
Runnable r = new Runnable() {
// Start the Runnable
public void run() {
System.out.println("Running");
}
};
Thread thr = new Thread(r);
System.out.println("Thread object created");
thr.start();
final UpdateClass session = new UpdateClass(x);
System.out.println("Thread object started");
try {
System.out.println("Starting UpdateClass.runProcess()");
session.runProcess();
Thread.sleep(1);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thr.stop();
System.out.println("Thread stopped");
}
}
publicstaticvoidmain(字符串[]args){
System.out.println(“程序启动”);
int numberOfthreads=2;
对于(int x=1;x您可以尝试在测试中复制问题的几件事情:
将mysqlcnf中的innodb_lock_wait_timeout更改为小时间间隔或增加线程睡眠时间(如果更改cnf文件,则需要重新启动DB服务器)
在线程进入睡眠状态之前,确保您持有一个锁(并且没有释放它)(您可能会在锁尚未释放的情况下,通过网络断开/DB连接关闭,但不能完全确定这一点,实现同样的效果)
我假设您的MySQL版本与生产中的版本相同。如果将线程超时增加到5000毫秒或更高,会发生什么情况?我假设您的代码中使用的是事务(自动提交关闭)删除/更新表中的信息,但延长线程睡眠时间以触发锁定超时。我还假设您共享的论坛帖子与您在测试环境中运行的MySQL版本/补丁相同。您是否也可以共享MySQL.cnf文件,特别是innodb_lock_wait_timOut。您的锁定超时应该超过此限制才能复制此问题。我确实尝试过以1000个线程运行。我遇到了MySql错误,而不是我需要的锁定等待超时错误。更改数据库中的间隔不是我需要做的。默认值不足。我遇到的问题是创建对数据库的同步查询。T这是一个编程问题。我认为我需要实现某种类型的递归,其中多个线程同时运行。我现在的代码工作原理是一个线程工作,然后完成,然后另一个线程开始…等等…这不是我想要的。我试过许多不同的循环配置,但都没有用。除非我误解了-您试图在测试中复制prod问题。问题是您在使用MySQL时遇到锁定等待超时。如果您需要复制该问题(锁定等待超时),您可以重复上述步骤(在您的代码中,您似乎将线程睡眠时间设置为1ms,将其增加到MySQL配置的锁定时间以上,确保您保持锁定,不要放弃锁定)-您应该能够复制超时。您能够复制该问题吗?