随tomcat的启动,启动另外一个线程

本文介绍如何在Servlet的init方法中创建并启动一个后台线程,该线程将无限循环执行特定任务,并通过休眠机制控制执行频率。此外,还展示了如何在web.xml文件中配置Servlet以实现启动时加载。

搞一个servlet,在init方法里写代码

 

@Override
	public void init() throws ServletException {
		Runnable runnable = new Runnable() {

			public void run() {
				//下面是线程里的相关处理代码
				while (true) {
					try {
						//休眠时间
						Thread.sleep(3000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		};
		//启动这个线程
		new Thread(runnable).start();
	}
   

web.xml 中的配置,不需要映射路径

 <servlet>
		<!--这里写servlet的名字-->
		<servlet-name>FetchListener</servlet-name>
		<!--这里是你servlet的路径-->
		<servlet-class>com.debaiqi.wmmaService.listener.FetchListener</servlet-class>
		<!--这里servlet启动的优先级。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,正数的值	越小,启动该servlet的优先级越高。当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载-->
		<load-on-startup>1</load-on-startup>
</servlet>
 

 

### Tomcat线程的生命周期与终止 在 Tomcat启动和运行过程中,多个线程被创建以处理不同的任务。例如,`JIoEndpoint` 类中的 `start` 方法会创建并启动指定数量的 `Acceptor` 线程[^1]。此外,`HttpProcessor` 的 `run` 方法会在后台监听传入的 TCP/IP 连接,并将这些连接分配给适当的处理器线程[^2]。 当 Tomcat 接收到关闭信号,其内部机制确保所有相关的线程能够正确终止。以下是关于 Tomcat线程生命周期的关键点: 1. **Acceptor 线程的终止** 在 `JIoEndpoint` 类中,`Acceptor` 线程通过一个循环不断等待新的连接请求。如果 Tomcat 收到停止信号(即 `stopped` 标志被设置为 `true`),`Acceptor` 线程会退出其主循环并终止[^1]。 2. **工作线程的终止** 工作线程通过 `WorkerStack` 管理,并且在处理完当前请求后会返回到线程池中待用[^3]。一旦 Tomcat 关闭,这些线程会被通知停止,并从线程池中移除。 3. **shutdown hook 的作用** Java 提供了 shutdown hook 机制,允许开发者在 JVM 终止执行清理代码[^5]。Tomcat 利用这一机制,在应用正常或异常终止确保所有资源(包括线程)都被正确释放。 4. **await 方法的行为** 在某些情况下,`await` 方法可能用于等待特定端口上的连接请求。如果 Tomcat 被配置为嵌入式模式或端口设置为 `-1`,则该方法会进入无限循环,直到收到停止信号[^4]。这种设计确保了线程不会在未完成的任务中卡住。 综上所述,Tomcat启动线程会在 Tomcat 停止自动终止。这是通过结合线程标志位检查、线程池管理以及 Java 的 shutdown hook 机制实现的。 ```python # 示例:模拟 Tomcat 中的线程终止逻辑 import threading class AcceptorThread(threading.Thread): def __init__(self, stopped_event): super().__init__() self.stopped = stopped_event def run(self): while not self.stopped.is_set(): print("Acceptor thread is running...") # 模拟等待新连接 self.stopped.wait(1) print("Acceptor thread is terminating...") # 创建停止事件 stop_event = threading.Event() # 启动 Acceptor 线程 acceptor = AcceptorThread(stop_event) acceptor.start() # 模拟 Tomcat 停止 print("Stopping Tomcat...") stop_event.set() acceptor.join() ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值