ServletContextListener监听器在liunx下的工作异常?

我在web应用下写了一个监听器,这个监听器应在tomcat启动前执行,即tomcat打印出Server startup in xxxx ms前执行。监听器定时轮询启动一个任务,任务里派生多个线程去多个数据库读取数据,最后汇总数据得到结果,。有时数据库可能连接不通,因此有异常扑获代码,在window下该代码可以扑获异常,让这个监听器执行完毕。但在liunx下监听器没有扑获异常导致监听器没有执行完毕,导致程序出错,window和liunx的tomcat相同,唯一不同的时系统环境和tomcat启动的脚本一个.sh一个.bat
[b]问题补充:[/b]
to lovewhzlq:有啥解决办法吗
[b]问题补充:[/b]
to lovewhzlq:可能是我的线程模型有问题,我用timetask执行一个任务,在任务的run方法里调用一个方法,该方法派生多个线程,然后再run方法里获取结果
[b]问题补充:[/b]
to lovewhzlq:我搜了一下这个包好像很好用,不过这个包可以屏蔽window和liunx下系统线程调度的差异吗,每个run方法的异常如何扑获吗?
[b]问题补充:[/b]
to lovewhzlq:不知道ServletContextListener和这个concurrent包可以集成在一起用吗,我要研究一下
[b]问题补充:[/b]
to lovewhzlq:我的线程模型里每个线程执行时,要传入不同的参数,这个用java.util.concurrent那个接口比较好
[b]问题补充:[/b]
to lovewhzlq:我用了包还有这个问题
[b]问题补充:[/b]
to lovewhzlq:我把出问题的代码等到tomcat启动后在liunx下执行也是好用,意思即是用SelvletContextListener在linux下启动tomcat时有问题
[b]问题补充:[/b]
to 各位:有招吗,我没招了,在liunx下就挂住了,连接池初始化不了
[b]问题补充:[/b]
to lovewhzlq:可以在struts的action里启动定时器吗
[b]问题补充:[/b]
to lovewhzlq:我感觉关键还不是在调度,而是liunx下扑获数据库连接异常用时太长,导致僵死在那里

如果真的这么变态的话,

你试着把这部分变态的地方抽取出来,是不是自己设置个超时时间,把它终止掉

可能是启动多个线程导致的问题,系统的线程调度等不一样

监听器定时轮询启动一个任务,任务里派生多个线程去多个数据库读取数据

你自己管理这些线程吗》

你最好用jdk1.5后加入的新的并发包里的类

软件包 java.util.concurrent 的描述

在并发编程中很常用的实用工具类。此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类,没有这些类,这些功能会很难实现或实现起来冗长乏味。下面简要描述主要的组件。另请参阅 locks 和 atomic 包。

执行程序
接口。Executor 是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。根据所使用的具体 Executor 类的不同,可能在新创建的线程中,现有的任务执行线程中,或者调用 execute() 的线程中执行任务,并且可能顺序或并发执行。ExecutorService 提供了多个完整的异步任务执行框架。ExecutorService 管理任务的排队和安排,并允许受控制的关闭。ScheduledExecutorService 子接口添加了对延迟的和定期任务执行的支持。ExecutorService 提供了安排异步执行的方法,可执行由 Callable 表示的任何函数,结果类似于 Runnable。Future 返回函数的结果,允许确定执行是否完成,并提供取消执行的方法。
实现。类 ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 提供可调的、灵活的线程池。Executors 类提供大多数 Executor 的常见类型和配置的工厂方法,以及使用它们的几种实用工具方法。其他基于 Executor 的实用工具包括具体类 FutureTask,它提供 Future 的常见可扩展实现,以及 ExecutorCompletionService,它有助于协调对异步任务组的处理。

你自己来管理这种线程任务,出现问题的几率自然大多了,

用jdk的类库来做这种事,1.5版本后新增的并发包就是为了更强大地去管理线程的问题,

建议你先研究下并发包,改写下你的代码,

不过这个包可以屏蔽window和liunx下系统线程调度的差异吗,每个run方法的异常如何扑获吗?

对于jdk它本身提供的类库,至少应该不用怀疑它的平台兼容性问题吧,

它能管理每个线程,你先去研究下重写你的代码,

那就只能定位为代码问题了,
这样就得代码审查看了

在struts的action里启动定时器的意思,也就是针对单个请求,再启动一个线程,

当然如果你能正确管理这个线程是没问题的,在web容器里自己启动线程的话,最好是用框架,quartz这种比较成熟的框架,能比较好管理线程

liunx下扑获数据库连接异常用时太长?

这个有点不太理解,捕获异常用时太长,你怎么测出这个问题