-
在ServletContextListener中使用自定义线程会有什么害处?5
事情是这样的:
这是个webapp,运行于Tomcat中,由于某种需要(一个已经离开的同事设计并开发的)在ServletContextListener中start一个自己写的线程(继承java.lang.Thread),这个线程定期查看一个LinkedHashMap中的对象是否过期。
上线以后从log中发现webapp运行良好的情况下这个线程会突然消失,极为疑惑,不知是何原因,特请Javaeye上的朋友们帮忙,还请不吝赐教!2012年6月18日 10:59
5个答案 按时间排序 按投票排序
-
ServletContextListener启动线程本身没有什么问题,线程突然消失一般情况下是由于
1.线程执行过程中遇到了错误,比方说某些未预知的RuntimeException的抛出,都可能会引起线程死亡。
2.线程一直等待某种资源被释放,或者可能遇到了死锁。
3.线程被正常关闭。
LZ最好还是通过更详细的log来看看到底是哪里出了问题。2012年6月19日 09:11
-
quartz的底层是自己定义的线程池,与web容器无关。也就是说,在web启动的时候,会启动一组线程用于定时任务,这个线程池的个数可配置。
你可以在ServletContextListener的contextDestroyed方法内打出日志。如果真的像你所说的“消失”,应该会调用这个destroy方法的。还有一种并不是“消失”而是time取消掉了,这是由于执行了timer.cancel();方法导致的。所以你可以按照以下步骤来定位问题:
1.判断是否Listener销毁了,通过contextDestroyed方法来确定
2.如果没有销毁,请跟踪代码,看看是否哪里调用了timer.cancel();方法
3.如果这些都无法确定问题的根源,请继续在TimerTask的run方法内打印时间戳日志,看看最后一次执行的时间是什么时候,会不会时间设定的问题。
4.以上3点都无法确定,请把代码发给我,我帮你检查2012年6月19日 08:07
-
ServletContextListener 启动线程没什么坏处 ,至少我们项目没发现,
至于为什么消失了,可以打一下日志跟踪下,或者看下其他的条件2012年6月18日 13:18
相关推荐
我们可以通过实现 ServletContextListener 接口,并在 contextInitialized() 方法中加载数据,使用 setAttribute() 方法将数据提交到内存中去。然后,其他的 Servlet 就可以通过 getAttribute() 方法将数据取出。 ...
在Java Web开发中,`ServletContextListener`、`Timer`和`TimerTask`是三个非常重要的概念,它们分别涉及Web应用程序的生命周期管理、定时任务的执行和控制。下面将详细讲解这三个概念及其应用。 首先,`...
本文主要探讨了在Java平台上如何开发和使用多线程,特别是在Web应用程序中的实践。 首先,Java语言提供了内置的支持多线程的能力,允许开发者创建并发执行的任务。一个Java类可以通过实现`Runnable`接口或继承`...
例如,如果你有一个名为`config.properties`的全局配置文件,你可以在`contextInitialized`方法中读取它,并将内容放入内存中供后续使用: ```java Properties props = new Properties(); InputStream is = sce....
在Java Web开发中,`ServletContextListener`是一个非常重要的接口,它是Servlet API的一部分,定义了两个方法:`contextInitialized`和`contextDestroyed`。这个接口的主要作用是监听Servlet上下文(`...
这是一个maven项目,直接导入eclipse即可运行,此处监听的是9092端口,将项目运行起后,可以对其端口使用情况进行查看,在window下,可以使用命令 netstat -aon|findstr "9092",在linux下可以使用命令netstat -...
在"利用servlet监听器,系统启动时创建自定义容器简单例子"中,我们主要关注`ServletContextListener`接口。要创建一个监听器,你需要编写一个类,实现`ServletContextListener`接口,并重写它的两个方法:`context...
Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在源代码中的任何元素(类、方法、变量等)上添加元数据。自定义注解可以被编译器或者运行时系统用来执行特定的任务,例如代码分析、性能监控、持久化...
在这个场景中,我们将探讨如何使用`ServletContextListener`来实现在线人数的统计和显示人员列表的功能。 首先,让我们了解一下`ServletContextListener`的基本用法。要创建一个`ServletContextListener`,你需要...
在这篇文章中,我们将介绍如何使用ServletContextListener来实现UDP监听。 在UDP监听中,需要使用DatagramSocket来创建一个UDP套接字,以便监听UDP数据报。同时,需要使用ServletContextListener来监听Servlet上...
这里我们将深入探讨如何在Java Web环境中利用多线程和长连接技术实现Socket通信。 首先,为了在Web应用启动时初始化Socket监听,我们可以创建一个实现了`ServletContextListener`接口的类,如`AttendSocetListener`...
当应用被卸载时,如果没有在对应的`ServletContextListener`的`contextDestroyed`方法或Servlet的`destroy`方法中停止这些服务,就会导致资源泄漏,使得应用无法完全卸载,从而引发此异常。 修复这个问题的关键在于...
在`web.xml`中配置TLD,以便应用知道如何找到并使用自定义标签。 4. 在JSP页面中引入标签库,使用`<jsp:useBean>`或`<taglib>`指令引用TLD。 这些概念和实践构成了Java Web开发的核心部分,它们提供了扩展和控制...
- 在Servlet环境中,可以使用`ServletContextListener`监听ServletContext事件,如Web应用启动和停止。 7. **监听器的应用场景** - 初始化数据:在应用启动时加载配置信息或初始化静态资源。 - 日志记录:监控和...
此外,考虑到长时间运行的任务可能会影响应用性能,可以考虑使用线程池来管理执行任务的线程,以限制同时运行的任务数量。 总之,Java通过Servlet监听器和定时器提供了一种优雅的方式来实现在Web应用程序中自动化...
2. **Servlet监听器**: 在Web开发中,特别是使用Servlet技术时,监听器(如ServletContextListener、ServletRequestListener和HttpSessionListener)用于监听Servlet容器的特定事件。例如,ServletContextListener...
总结来说,Java实现定时任务有多种方法,其中在Web应用中使用监听器和`TimerTask`是一种常见的方式。这种方式易于理解和实现,但可能不适合复杂的定时需求。对于更复杂的需求,可以考虑使用`...
- 多线程安全性:由于监听器可能被多个线程同时访问,因此在编写监听器时,必须考虑线程安全问题,确保代码能够在并发环境中正确运行。 4. **监听域对象的创建和销毁** - `ServletContextListener`:当Web应用...
首先,Spring框架在Web应用中的主要作用是提供依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这有助于减少代码间的耦合度,提高可测试性和可维护性。在Web环境中,...