0 0

java web项目这么用线程对么?3

在系统启动的时候创建了一个线程并且start。我想在系统关闭,也就是关闭Tomcat的时候停止这个线程。

 

class CheckThread extends Thread{
	private boolean live = true;
	public boolean isLive() {
		return live;
	}

	public void setLive(boolean live) {
		this.live = live;
	}

	@Override
	public void run() {
		while(live){
			System.out.println("work");
			
			try {
				Thread.sleep(30000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
	
}

 

 

 

 

 

public class SystemContextListener implements ServletContextListener {

	private CheckThread thread = null;
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("应用关闭");
		thread.setAppIsAlive(false);
	}

	@Override
	public void contextInitialized(ServletContextEvent e) {
		ServletContext ctx = e.getServletContext();
		ctx.setAttribute("onlineUser", new ConcurrentHashMap<String, Date>());
		CheckThread checkThread= (CheckThread)
				WebApplicationContextUtils.getWebApplicationContext(ctx).getBean("CheckThread");
		onlineUserCheckThread.setName("checkThread");
		thread = checkThread;
		thread.start();
		
	}


}

 

 

 

 

@Override

public void contextDestroyed(ServletContextEvent arg0) {

System.out.println("应用关闭");

thread.setAppIsAlive(false);

}

 

 

 

通过线程自己的成员变量做判断,这么写能保证线程在tomcat关闭时 被停止么?


问题补充:<div class="quote_title">OpenMind 写道</div><div class="quote_div">这样玩线程是可以的,但如楼上所说,在shutdown时,你可能需要等待你的线程运行完毕以后再继续destroy其他的资源,比如,你可以这样: <br /><pre name="code" class="java">
    public void contextDestroyed(ServletContextEvent arg0) { 
        System.out.println("应用关闭"); 
        thread.setAppIsAlive(false); 
        thread.join();
    } 
</pre></div> <br /> <br />除了join(),有更好的解决方法么,你遇到过类似的问题么?
2012年2月16日 08:49

3个答案 按时间排序 按投票排序

0 0

如果你需要等待多个线程结束的话,可以使用CountDownLatch来同步

2012年2月16日 14:14
0 0

这样玩线程是可以的,但如楼上所说,在shutdown时,你可能需要等待你的线程运行完毕以后再继续destroy其他的资源,比如,你可以这样:

    public void contextDestroyed(ServletContextEvent arg0) {  
        System.out.println("应用关闭");  
        thread.setAppIsAlive(false);  
        thread.join();
    }  

2012年2月16日 12:26
0 0

不能,tomcat关闭时,已经没有足够时间运行你的程序了,除非执行很快。况且你的程序如果正处于一个很长的运行过程呢。

或者关闭线程需要很长的处理时间呢。

2012年2月16日 09:37

相关推荐

    java web项目单线程

    设主键: Alter table student add primary key (sno); 删除主键: Alter table student drop primary key; 删除表: Drop table student; 设外键: Alter table score add foreign key(列名) references 表名...

    JavaMelody JAVA Web项目服务器性能监控工具

    通过在Java Web应用中简单集成,JavaMelody就能提供包括请求处理时间、SQL查询、内存使用、线程信息、异常跟踪等多种关键性能指标的可视化报告。 首先,JavaMelody的核心功能在于其丰富的监控指标。它能够监控HTTP...

    java多线程web服务器

    java 多线程和服务器的源码,用于web服务器的java多线程控制

    Java+Web项目企业事务管理系统源码 (1)Java源码

    这是一个基于Java技术的Web项目,主要关注的是企业事务管理系统的实现。这个系统源码的提供,对于学习和理解Java在企业级应用中的实践具有很高的价值。以下将详细讲解与Java Web项目相关的知识点。 1. **Java编程...

    java开源web项目3

    9. **性能优化**:Java Web项目3可能涉及到性能优化,包括缓存策略(如使用 Ehcache 或 Redis)、数据库查询优化、异步处理和负载均衡等,以确保应用在高并发场景下的稳定性和响应速度。 10. **版本控制与协作**:...

    程序设计-基于Java的多线程Web服务器

    "MultiThreadedWebServer.java"是Web服务器的核心,它使用多线程技术来处理并发的客户端请求。在Java中,多线程可以通过继承Thread类或实现Runnable接口来实现。通常,服务器会创建一个新的线程来处理每个新到来的...

    深入体验Java+Web项目开发(开发日记)2

    在深入体验Java+Web项目开发的过程中,我们将会探讨一系列关键知识点,这些都是构建高效、稳定且可扩展的Web应用程序的基础。本开发日记将分为几个部分,逐一解析这些技术要点。 首先,Java作为后端开发的主要语言...

    java web项目实战大全源码搜索引擎

    Java Web项目实战大全源码搜索引擎是一个综合性的学习资源,涵盖了Java Web开发中的重要模块,特别是搜索引擎的实现。这个项目旨在帮助开发者深入理解如何在Web应用中集成和构建搜索引擎功能,以便用户可以高效地...

    Web项目中Java多线程的使用.pdf

    Java多线程在Web项目中的应用是提高系统性能和响应速度的重要手段。本文主要探讨了在Java平台上如何开发和使用多线程,特别是在Web应用程序中的实践。 首先,Java语言提供了内置的支持多线程的能力,允许开发者创建...

    简单JAVA WEB服务器

    【Java Web服务器基础】 在IT领域,Java Web服务器是一种用于处理HTTP请求并返回Web内容的软件。...此外,此项目也提供了一个动手实践的机会,有助于提高对HTTP协议、Java多线程以及服务器端编程的理解。

    java web项目,该项目 运用算法 线程 web socket 以及部署服务器

    war包已打包好 需要更改 web.config 里面的 ip 以及端口号 以及数据库 以及admin里面的js 有个url.js ...4.java发送邮箱 2022.3.27 (email.jar java类) 5.登录修改密码 邮箱找回 2022.3.28(密码进行md5加

    5个简单的java web项目.zip

    【标签】"java"提示我们,这些项目是用Java语言编写的,Java在Web开发领域有着广泛的应用,尤其在企业级应用中,因为它提供了强大的类型检查、垃圾回收以及多线程支持。 【压缩包子文件的文件名称列表】列出了几个...

    Spring Boot非Web项目运行的方法

    Spring Boot非Web项目运行的方法 Spring Boot是一个基于Java的开源框架,主要用于构建基于...本文主要介绍了Spring Boot非Web项目运行的相关资料,通过示例代码对大家学习或者使用Spring Boot具有一定的参考学习价值。

    JAVA WEB 项目 Java技术文档

    这个"JAVA WEB 项目 Java技术文档"很可能是对一个具体项目开发过程的记录,涵盖了从基础知识到进阶概念的全面讲解。让我们深入探讨一下其中可能包含的知识点。 1. **Java基础**: - **语法基础**:包括类、对象、...

    java web 多线程下载器

    Java Web 多线程下载器是一种利用Java编程语言实现的高效下载工具,它通过将大文件分割成多个部分,同时启动多个线程进行下载,从而显著提高了文件下载速度。这样的设计充分利用了网络带宽和系统资源,尤其在处理大...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java的线程和Java Applet是Java编程中的两个重要概念,它们分别涉及并发执行和Web应用程序的执行环境。 **线程**在Java中是程序执行的最小单元,它允许程序在同一时间执行多个任务。Java内置对多线程的支持,使得...

    基于多线程的web服务器java源码

    【标题】基于多线程的Web服务器Java源码解析 在Web开发领域,服务器是至关重要的组成部分,它们负责处理客户端的HTTP请求并返回相应的HTTP响应。本篇文章将深入探讨一个基于多线程的Web服务器Java源码,帮助你理解...

    Java面向对象与线程与Mysql与WEB基础面试题总结.rtf

    Java面向对象与线程与Mysql与WEB基础面试题总结,其中总结了一部分高频面试题

    Java Web应用开发项目教程(附电子教案,程序源代码,习题答案)

    《Java Web应用开发项目教程》是一本以实践为导向的教程,旨在帮助读者深入理解并掌握Java Web开发技术。教程通过完整的案例,采用模块化的教学方式,将复杂的Web应用开发过程分解为可操作的步骤,逐步引导学习者...

    Java Web 项目-在线考试系统

    通过学习和理解这个“Java Web 项目-在线考试系统”,开发者不仅可以深入理解JAVA和JAVAWEB技术,还能掌握项目开发流程、数据库设计、安全性实践等多个方面,为今后的Web开发工作打下坚实基础。

Global site tag (gtag.js) - Google Analytics