日期:2014-05-17  浏览次数:20665 次

请教一个关于异常无法捕捉的问题(急)
我做的程序是一个JSP的游戏网站。里面有个后台程序每1秒钟运行一次。
使用的是timer.schedule。
timer.schedule(new java.util.TimerTask() { public void run() { Background.run();} }, 0, 1000);

在Background.run()里面有段代码,很简单,调用一个后台函数。这段代码在每个小时开始的时候执行一次。但是,这段代码中有个莫名其妙的问题,只要执行到这段代码,后台程序就无法运行了。所以造成了服务器运行1小时就挂了的现象。

之所以我知道是这段代码有问题,是因为我把这段代码注释掉之后,一切都正常了。但是,我用Try Catch却无法捕捉到其中的异常。当然,这代码里面也绝对不会有关闭timer的函数。不知道是什么原因导致后台线程中止运行。

请高手指教。


------解决方案--------------------
堵塞了!!!

楼主好好补习线程方面的知识吧。
------解决方案--------------------
1) 首先你需要检查是否是runHour()造成的
试验一下不从Timer中调用runHour,而是直接调用它,是否会有问题

2) 给Background.run()方法加上synchronized
public static synchronized void run()

3) 如果timer = new Timer(true);
改成timer = new Timer();看看