Mysql 创建同时访问数据库的多个线程

Mysql 创建同时访问数据库的多个线程,mysql,multithreading,Mysql,Multithreading,我试图在各种留言板上找到解决我问题的方法。然而,我遇到了困难。我试图在Mysql INNODB表上重新创建数据库“LockWait Timeout”上发生的问题。(有关我试图解决的问题的信息,请转到:)我已经缩小了问题的范围,并且我有了解决方案。但我无法在测试环境中重新创建问题,以便测试我的解决方案 这是我的密码: public static void main(String[] args) { System.out.println("Programm Starting

我试图在各种留言板上找到解决我问题的方法。然而,我遇到了困难。我试图在Mysql INNODB表上重新创建数据库“LockWait Timeout”上发生的问题。(有关我试图解决的问题的信息,请转到:)我已经缩小了问题的范围,并且我有了解决方案。但我无法在测试环境中重新创建问题,以便测试我的解决方案

这是我的密码:

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配置的锁定时间以上,确保您保持锁定,不要放弃锁定)-您应该能够复制超时。您能够复制该问题吗?