2016-03-31 80 views
0

我想通過解析文檔並將結果插入到數據庫中。該文件非常大(幾百萬條記錄),所以我正在嘗試通過c3p0和批處理來實現多線程連接池。對於每解析1000條記錄,我將創建一個將創建PreparedStatement的線程,插入所需的一系列值,然後添加到PreparedStatement的批處理中。但是,在executeBatch函數中,程序只是掛起,並沒有任何內容插入到數據庫中。我想知道我是不是正在使用c3p0還是其他的東西?我試圖將它限制爲一個線程,認爲多線程可能是問題,但即使只有一個線程,它仍然掛在執行批處理上。程序掛在executeBatch

下面是旋轉關閉線程的代碼:

service.submit(new ElementProcessor(source.getConnection(), fElements)); 

來源是我ComboPooledDataSource和服務是一個ExecutorService。此外,對於ElementProcessor類的構造函數:

private Connection DB; 
public ElementProcessor(Connection db, Element[] elements) { 
    DB = db; 
    try { 
     DB.setAutoCommit(false); 
    } catch (SQLException ex) { 

    } 
    this.elements = elements; 
} 

從JVM線程轉儲堆棧跟蹤:

2016-03-31 12:17:03 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.40-b16 mixed mode): 

"Attach Listener" #34 daemon prio=9 os_prio=31 tid=0x00007fdf6e000000 nid=0x3e0b waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"pool-1-thread-16" #33 prio=5 os_prio=31 tid=0x00007fdf6b970800 nid=0x8103 waiting on condition [0x0000700002b97000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-15" #32 prio=5 os_prio=31 tid=0x00007fdf6e276000 nid=0x7f03 waiting on condition [0x0000700002a94000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-14" #31 prio=5 os_prio=31 tid=0x00007fdf6b228800 nid=0x7d03 waiting on condition [0x0000700002991000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-13" #30 prio=5 os_prio=31 tid=0x00007fdf6c0b8000 nid=0x7b03 waiting on condition [0x000070000288e000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-12" #29 prio=5 os_prio=31 tid=0x00007fdf6b948000 nid=0x7903 waiting on condition [0x000070000278b000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-11" #28 prio=5 os_prio=31 tid=0x00007fdf6abf4000 nid=0x7703 waiting on condition [0x0000700002688000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-10" #27 prio=5 os_prio=31 tid=0x00007fdf6b1b0800 nid=0x7503 waiting on condition [0x0000700002585000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-9" #26 prio=5 os_prio=31 tid=0x00007fdf6d11c800 nid=0x7303 waiting on condition [0x0000700002482000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-8" #25 prio=5 os_prio=31 tid=0x00007fdf6c0fd800 nid=0x7103 waiting on condition [0x000070000237f000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-7" #24 prio=5 os_prio=31 tid=0x00007fdf6d9b1800 nid=0x6f03 waiting on condition [0x000070000227c000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-6" #23 prio=5 os_prio=31 tid=0x00007fdf6c1e8800 nid=0x6d03 waiting on condition [0x0000700002179000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-5" #22 prio=5 os_prio=31 tid=0x00007fdf6e835000 nid=0x6b03 waiting on condition [0x0000700002076000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-4" #21 prio=5 os_prio=31 tid=0x00007fdf6d958800 nid=0x6903 waiting on condition [0x0000700001f73000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-3" #20 prio=5 os_prio=31 tid=0x00007fdf6d138000 nid=0x6703 waiting on condition [0x0000700001e70000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-2" #19 prio=5 os_prio=31 tid=0x00007fdf6e189800 nid=0x6503 waiting on condition [0x0000700001d6d000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"pool-1-thread-1" #18 prio=5 os_prio=31 tid=0x00007fdf6c1c2800 nid=0x6303 waiting on condition [0x0000700001c6a000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000772bcaca0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

"MySQL Statement Cancellation Timer" #17 daemon prio=5 os_prio=31 tid=0x00007fdf6d0c3000 nid=0x6103 in Object.wait() [0x0000700001b67000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bce798> (a java.util.TaskQueue) 
    at java.lang.Object.wait(Object.java:502) 
    at java.util.TimerThread.mainLoop(Timer.java:526) 
    - locked <0x0000000772bce798> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Timer.java:505) 

"C3P0PooledConnectionPoolManager[identityToken->2rvxu59f1l0as16hejmoc|6477463f, dataSourceName->com.mysql.jdbc.Driver]-DeferredStatementDestroyerThread-#0" #16 daemon prio=5 os_prio=31 tid=0x00007fdf6d058000 nid=0x5f03 in Object.wait() [0x0000700001a64000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bcecf0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:683) 
    - locked <0x0000000772bcecf0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 

"C3P0PooledConnectionPoolManager[identityToken->2rvxu59f1l0as16hejmoc|6477463f, dataSourceName->com.mysql.jdbc.Driver]-HelperThread-#2" #15 daemon prio=5 os_prio=31 tid=0x00007fdf6c07c800 nid=0x5d03 in Object.wait() [0x0000700001961000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:683) 
    - locked <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 

"C3P0PooledConnectionPoolManager[identityToken->2rvxu59f1l0as16hejmoc|6477463f, dataSourceName->com.mysql.jdbc.Driver]-HelperThread-#1" #14 daemon prio=5 os_prio=31 tid=0x00007fdf6c07c000 nid=0x5b03 in Object.wait() [0x000070000185e000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:683) 
    - locked <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 

"C3P0PooledConnectionPoolManager[identityToken->2rvxu59f1l0as16hejmoc|6477463f, dataSourceName->com.mysql.jdbc.Driver]-HelperThread-#0" #13 daemon prio=5 os_prio=31 tid=0x00007fdf6c0af000 nid=0x5903 in Object.wait() [0x000070000175b000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:683) 
    - locked <0x0000000772bcf1b0> (a com.mchange.v2.async.ThreadPoolAsynchronousRunner) 

"C3P0PooledConnectionPoolManager[identityToken->2rvxu59f1l0as16hejmoc|6477463f, dataSourceName->com.mysql.jdbc.Driver]-AdminTaskTimer" #12 daemon prio=5 os_prio=31 tid=0x00007fdf6e008000 nid=0x5707 in Object.wait() [0x0000700001658000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772bcef08> (a java.util.TaskQueue) 
    at java.util.TimerThread.mainLoop(Timer.java:552) 
    - locked <0x0000000772bcef08> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Timer.java:505) 

"Service Thread" #9 daemon prio=9 os_prio=31 tid=0x00007fdf6b84b000 nid=0x5303 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C1 CompilerThread3" #8 daemon prio=9 os_prio=31 tid=0x00007fdf6b801000 nid=0x5103 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fdf6a829800 nid=0x4f03 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fdf6b028800 nid=0x4d03 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fdf6b026800 nid=0x4b03 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fdf6b01f800 nid=0x3a0f runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fdf6b01d800 nid=0x3803 in Object.wait() [0x0000700000d3a000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772b9a640> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142) 
    - locked <0x0000000772b9a640> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158) 
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) 

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fdf6b01c800 nid=0x3603 in Object.wait() [0x0000700000c37000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000006c1645268> (a java.lang.ref.Reference$Lock) 
    at java.lang.Object.wait(Object.java:502) 
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157) 
    - locked <0x00000006c1645268> (a java.lang.ref.Reference$Lock) 

"main" #1 prio=5 os_prio=31 tid=0x00007fdf6b000800 nid=0x1703 in Object.wait() [0x0000700000219000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x0000000772c33978> (a com.mchange.v2.resourcepool.BasicResourcePool) 
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1465) 
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644) 
    - locked <0x0000000772c33978> (a com.mchange.v2.resourcepool.BasicResourcePool) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:758) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685) 
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140) 
    at xmltodb.XMLToDB.endElement(XMLToDB.java:103) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLNSDTDValidator.endNamespaceScope(XMLNSDTDValidator.java:266) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2005) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at xmltodb.XMLToDB.main(XMLToDB.java:177) 

"VM Thread" os_prio=31 tid=0x00007fdf6b01a000 nid=0x3403 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fdf6b805800 nid=0x2403 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fdf6b806000 nid=0x2603 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fdf6b806800 nid=0x2803 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fdf6b807000 nid=0x2a03 runnable 

"GC task thread#4 (ParallelGC)" os_prio=31 tid=0x00007fdf6b808000 nid=0x2c03 runnable 

"GC task thread#5 (ParallelGC)" os_prio=31 tid=0x00007fdf6b808800 nid=0x2e03 runnable 

"GC task thread#6 (ParallelGC)" os_prio=31 tid=0x00007fdf6b809000 nid=0x3003 runnable 

"GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007fdf6b809800 nid=0x3203 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007fdf6c014800 nid=0x5503 waiting on condition 

JNI global references: 241 
+0

c3p0一般處理平行批量插入物。你應該做的第一件事情就是調試JVM的線程堆棧,並且準確地查看掛起的位置。顯然,還要事先檢查日誌以獲取警告消息和堆棧跟蹤。如果您正在使用語句緩存,MySQL和c3p0,請考慮將c3p0 config param'statementCacheNumDeferredCloseThreads'添加到1,這可以解決導致凍結的JDBC驅動程序易碎性問題。 –

+0

所有線程堆棧轉儲看起來都差不多,所以它們肯定會掛掉某些東西。我修改了原始帖子以包含堆棧跟蹤,因爲它不適合評論。 –

+0

有趣的更新:所以我打開了自動提交,看看它是否會有所作爲,果然,掛起前有64,000條記錄。很顯然,它看起來像是在執行批量插入操作,但是在插入之後會掛掉其他內容。 –

回答

0

明白了!我有PreparedStatement做closeOnCompletion()而不是簡單的老close(),這導致它掛起。