我有一点问题,以正确的方式解决这个问题。
我有一个Java应用程序使用线程连续读取日志文件。当该应用程序仍在读取日志文件时,客户端应该能够通过java servlet查询当前状态(即在日志文件中找到某个键)。
我当前的问题是我在使用servlet的doGet-Method获取该状态时遇到问题。运行线程的WHile应该改变一个布尔变量。
我的问题是:
当我在Tomcat上部署Servlet时,如何让日志读取器线程开始运行。在空闲模式下,日志读取器正在侦听文件夹中的新文件,并在它们出现后开始读取它们吗?
答案 0 :(得分:1)
请查看以下链接,您可以使用SevletcontexListener
在SevletcontexListener中,您可以启动记录器
public void contextInitialized(ServletContextEvent servletContextEvent)
{
System.out.println("ServletContextListener started");
//start thread here
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
//stop thread here
}
答案 1 :(得分:1)
我当前的问题是我在使用servlet的doGet-Method获取该状态时遇到问题。运行线程的WHile应该改变一个布尔变量。
这可能是因为非线程安全布尔值的并发更新。有关此主题的更多详细信息,请阅读以下Java Concurrency
教程当我在Tomcat上部署Servlet时,如何让日志读取器线程开始运行。在空闲模式下,日志读取器正在侦听文件夹中的新文件,并在它们出现后开始读取它们吗?
请参阅following answer,其中描述了如何使用ServletContextListener
从Executors
启动线程,这是线程的高级抽象。
希望这会有所帮助......