Timer timer = new Timer();
timer.schedule(new MyTimerTask(), theDate, Integer.parseInt(interval) * 60 * 1000);
11 个解决方案
#1
MyTimerTask的实现贴出来看一下
#2
Integer.parseInt(String)可能抛出异常,检查问题会出在这吗?
#3
实现的代码很长,不全部贴了,错误已捕获处理,.......
public class MyTimerTask extends TimerTask {
static Logger logger = Logger.getLogger(MyTimerTask.class);
public void run() {
try {
.......
} catch (Exception ae) {
logger.error(ae.getMessage());
}
}
}
#4
这个,在前面已检查,确保正确了...........
#5
系统时间若有改变,timer就会挂掉
异常你捕获了,应该问题不在这
强烈建议换成ScheduledExecutorService executorService = Executors.newScheduledThreadPool(size);
用这个来调度,就不会有timer的乱七八糟的问题
异常你捕获了,应该问题不在这
强烈建议换成ScheduledExecutorService executorService = Executors.newScheduledThreadPool(size);
用这个来调度,就不会有timer的乱七八糟的问题
#6
如果大概知道是哪段代码有问题。。那就不用分析了。。直接改bug。。。
#7
debug是很好做的了 做起来比较有成就感 因为从来都可以找到错误原因
#8
试过了,spring+quatrz也试过了,都一样.............
#9
是卡住不动了,看来只有试试MemoryAnalyzer了,学习看看怎么用吧.........
#10
最后还是自己解决了:
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), theDate, Integer.parseInt(interval) * 60 * 1000);
这个MyTimerTask()里启动了20多个线程,照理说每个线程执行完成后,MyTimerTask也就结束了,实际情况是每个线程,都要对远程机器上的数据库进行连接,取数,结果,就有个别线程挂死了,时间长了,程序就崩溃了。对MyTimerTask进行改进,在线程正常运行需要的时间后,检测线程是否完成,如果没有完成,就强制终止线程。这样运行一段时间观察,一切都正常了。
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), theDate, Integer.parseInt(interval) * 60 * 1000);
这个MyTimerTask()里启动了20多个线程,照理说每个线程执行完成后,MyTimerTask也就结束了,实际情况是每个线程,都要对远程机器上的数据库进行连接,取数,结果,就有个别线程挂死了,时间长了,程序就崩溃了。对MyTimerTask进行改进,在线程正常运行需要的时间后,检测线程是否完成,如果没有完成,就强制终止线程。这样运行一段时间观察,一切都正常了。
#11
楼主,我也是跟你一样要定时对远程机器进行连接取值,然后启动一段时间后,会报错说连接关闭,求楼主帮忙.
错误1:java.io.IOException: Sorry, this connection is closed.
错误2:java.io.IOException: Could not open channel (The connection is being shutdown)
这是最近从日志文件中抛出的异常信息
#1
MyTimerTask的实现贴出来看一下
#2
Integer.parseInt(String)可能抛出异常,检查问题会出在这吗?
#3
实现的代码很长,不全部贴了,错误已捕获处理,.......
public class MyTimerTask extends TimerTask {
static Logger logger = Logger.getLogger(MyTimerTask.class);
public void run() {
try {
.......
} catch (Exception ae) {
logger.error(ae.getMessage());
}
}
}
#4
这个,在前面已检查,确保正确了...........
#5
系统时间若有改变,timer就会挂掉
异常你捕获了,应该问题不在这
强烈建议换成ScheduledExecutorService executorService = Executors.newScheduledThreadPool(size);
用这个来调度,就不会有timer的乱七八糟的问题
异常你捕获了,应该问题不在这
强烈建议换成ScheduledExecutorService executorService = Executors.newScheduledThreadPool(size);
用这个来调度,就不会有timer的乱七八糟的问题
#6
如果大概知道是哪段代码有问题。。那就不用分析了。。直接改bug。。。
#7
debug是很好做的了 做起来比较有成就感 因为从来都可以找到错误原因
#8
试过了,spring+quatrz也试过了,都一样.............
#9
是卡住不动了,看来只有试试MemoryAnalyzer了,学习看看怎么用吧.........
#10
最后还是自己解决了:
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), theDate, Integer.parseInt(interval) * 60 * 1000);
这个MyTimerTask()里启动了20多个线程,照理说每个线程执行完成后,MyTimerTask也就结束了,实际情况是每个线程,都要对远程机器上的数据库进行连接,取数,结果,就有个别线程挂死了,时间长了,程序就崩溃了。对MyTimerTask进行改进,在线程正常运行需要的时间后,检测线程是否完成,如果没有完成,就强制终止线程。这样运行一段时间观察,一切都正常了。
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), theDate, Integer.parseInt(interval) * 60 * 1000);
这个MyTimerTask()里启动了20多个线程,照理说每个线程执行完成后,MyTimerTask也就结束了,实际情况是每个线程,都要对远程机器上的数据库进行连接,取数,结果,就有个别线程挂死了,时间长了,程序就崩溃了。对MyTimerTask进行改进,在线程正常运行需要的时间后,检测线程是否完成,如果没有完成,就强制终止线程。这样运行一段时间观察,一切都正常了。
#11
楼主,我也是跟你一样要定时对远程机器进行连接取值,然后启动一段时间后,会报错说连接关闭,求楼主帮忙.
错误1:java.io.IOException: Sorry, this connection is closed.
错误2:java.io.IOException: Could not open channel (The connection is being shutdown)
这是最近从日志文件中抛出的异常信息