1

mysql データベースで 2 つの異なるスレッドを使用して挿入しようとしています。挿入は準備済みステートメントによって行われています。500のバッチで挿入します。

//g1 は、runnable を実装するクラスによってアクセスされるようにグローバルに作成されたオブジェクトです

    ExecutorService executor = Executors.newCachedThreadPool();

    Callable< Map<String, Set<String>>> callable2 = new PolyStrain();
    Callable<Map<String, Phenotype>> callable3 =  new DataPolymor();


    g1.kol=new HashMap<String, Set<String>>();

    g1.mapPheno = new HashMap<String, Phenotype>();


    Future<Map<String, Set<String>>> future = executor.submit(callable2); // hashmap of allele and strains
    Future<Map<String, Phenotype>> future1 = executor.submit(callable3); //hashmap of allele and chro,location

    g1.kol = future.get();
    System.out.println(g1.kol.size());


    g1.mapPheno= future1.get();

    System.out.println(g1.mapPheno.size());

    executor.shutdown();

    InsertStrain dp1 = new InsertStrain(); //data entry for allele and strain and frequency
    Thread t1= new Thread(dp1);
    t1.start();

    InsertPheno ip1 = new InsertPheno();
    Thread t2 = new Thread(ip1);
    t2.start();

私が直面している問題は、スレッド 2 が開始されることですが、挿入には機能しません。スレッド dp1 はそのタスクを完了します。dp1 の完了後、以下がスローされます。

Lock wait timeout exceeded; try restarting transaction 

私は設定しました

mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation, @@session.tx_isolation;

また、

mysql> set innodb_lock_wait_timeout=100

スレッド 2 が開始されても、挿入が開始されないのはなぜですか? どんな助けでも大歓迎です。よろしくお願いします。

4

0 に答える 0