【发布时间】:2014-05-22 12:15:49
【问题描述】:
在我的程序中有 3 个线程。 Thread 1 负责将当前有 279381 条记录的 MYSQL 数据库中的记录填充到队列中。 Thread 2 和Thread 3 从队列中读取和处理记录,并将它们插入到 HSQL 数据库中。根据我的期望,我在Thread 1 上得到了OutOfMemoryError,但令我惊讶的是,我的Thread 3 并没有终止我的进程,而是仍在运行。
这不是一种奇怪的行为吗?
我一直认为Errors 是致命的。它们处于jvm 级别,并且程序在它们发生时终止。但我认为Errors 是特定于线程的,如果程序即使在它们发生时也可以继续,为什么我们不允许捕捉它们?
还是还有一些我不知道的事情?我希望专家会对此有所了解。
我正在附加控制台输出。
LL populated :: 558759
Rows Read from Hospital Database ::279381
Total Rows in HSQL :: 119699 8931464
In Read HSQL
LL populated :: 558759Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
at java.nio.CharBuffer.wrap(CharBuffer.java:369)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:265)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.PrintStream.newLine(PrintStream.java:545)
at java.io.PrintStream.println(PrintStream.java:807)
at XXXX.readResultSet(XXXX.java:196)
at java.lang.Thread.run(Thread.java:722)
java.sql.SQLException: java.lang.OutOfMemoryError: Java heap space
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at YYYY.readHSQL(YYYY.java:203)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.hsqldb.HsqlException: java.lang.OutOfMemoryError: Java heap space
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.result.Result.newErrorResult(Unknown Source)
at org.hsqldb.StatementDMQL.execute(Unknown Source)
at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 6 more
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.hsqldb.QuerySpecification.buildResult(Unknown Source)
at org.hsqldb.QuerySpecification.getSingleResult(Unknown Source)
at org.hsqldb.QuerySpecification.getResult(Unknown Source)
at org.hsqldb.StatementQuery.getResult(Unknown Source)
... 10 more
In Read HSQL
Total Rows in HSQL :: 119699 8931464
In Read HSQL
Total Rows in HSQL :: 119699 8931464
In Read HSQL
【问题讨论】:
标签: java mysql multithreading exception-handling hsqldb