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

时间:2012-07-17 00:39:44

标签: mysql multithreading

我试图在各种留言板中找到我的问题的解决方案。但是,我遇到了墙。我试图在Mysql INNODB表上重新创建我们的数据库“LockWait Timeout”上发生的问题。 (有关我正在尝试解决的问题的信息,请转到:http://bugs.mysql.com/bug.php?id=10641)我已经缩小了问题范围,我有一个解决方案。但我无法在测试环境中重新创建问题,因此我可以测试我的解决方案。

这是我的代码:

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");
    }
}

基本上,我正在尝试将同步UPDATE复制到MySql表以创建LockWait Timeout问题。

我的类UpdateClass以我需要的方式工作,但我无法重新创建同步事件来调用该类。

问题:如何更改代码以增加产生导致超时的条件的可能性?

1 个答案:

答案 0 :(得分:0)

您可以尝试在测试中复制问题的一些事情:

  1. 将mysqlcnf中的innodb_lock_wait_timeout更改为较小的时间间隔或增加线程休眠时间(如果更改cnf文件,则需要重新启动数据库服务器)
  2. 确保在线程进入休眠状态之前保持锁定(并且没有释放它)(在锁定尚未释放但未完全释放的情况下,网络断开/数据库连接断开时可能会达到相同的效果某些事情)。
  3. 我假设您的MySQL版本与生产版本相同。