菜鸟俺也不是新手了。最近碰到一个 问题:我的几个线程居然在tomcat被shutdown之后还在乱跑。所以才想起这个概念来。
java com.myclass 这样是启动一个java进程,还是启动了一个java虚拟机?
java进程和java虚拟机之间是怎样的对应关系?
java程序中的线程是在java进程退出之后会自动被停止,还是要等java虚拟机退出后才会被终止?
怎样才能停止java虚拟机?比如在启动tomcat等服务器之后
java com.myclass 这样是启动一个java进程,还是启动了一个java虚拟机?
java进程和java虚拟机之间是怎样的对应关系?
java程序中的线程是在java进程退出之后会自动被停止,还是要等java虚拟机退出后才会被终止?
怎样才能停止java虚拟机?比如在启动tomcat等服务器之后
解决方案 »
- 如何做网站的模板管理
- struts2 参数传递 问题
- displaytag 导出表头
- 一用usebean就报错“ the useBean class attribute。。。。。is invalid”
- jsp字符转义,String.replace()
- displaytag分页问题
- [急]怎么样把动作与servlet联系起来?
- 高分急求,tomcat 5.0和apache2.0的整合而为以及虚拟目录的设置,并现金答谢.
- 学JSP已经一个多礼拜了,觉得越学越迷糊了?
- 怎么把这个字符串“\u60A8\u6CA1\u6709\u5220\u9664\u8BE5”转换为汉字?
- 大家帮小弟个忙,关于乱码问题!
- telnet一个机器的端口能通,但是往连到同机器,同端口的socket写入流时候就报错:software caused connection abort: socket write error
为何linux机器上,运行tomcat的shutdown.sh后,web服务不能用了,但是我启动的java线程还在跑(在jsp代码里面启动的线程)?????
他只是对应的一个线程,shutdown.sh只是关闭这个线程,而对其他的线程没有影响
---->Terminates the currently running Java Virtual Machine.
tm d 公司那个机器是用于运营的,又不好再现当时的情况!
Java虚拟机也是一个平台,编译好的class在这个平台上运行
tomCat和Java虚拟机概念差得很远
----这是绝对的。但是不知到tomcat的停止脚本shutdown.sh是否终止了java进程之后,为何之后还有我的线程残留。这些线程是我的tomcat里的一个jsp页面里启动的
tomcat中运行着jsp,其实这些都是jvm中的线程,而jsp中启动的线程也是在jvm中运行(也是jvm的线程,和tomcat,jsp等同等地位)。如果jvm关闭,也就是java进程停止,那么里面的线程也将全部停止。然而需要说明的是,tomcat只是在jvm中的一个线程而已,所以关闭tomcat不一定关闭tomcat所在的jvm!(比如在关闭tomcat时发生异常,导致主动关闭jvm的代码没有运行到,那么这zhogn情况就会发生。)
如果tomcat被关闭,而它所在的jvm没有关闭,那么有可能:敲入url访问,发现tomcat已经停止,但是先前由jsp启动的线程却在tomcat关闭之后还在跑!
很有可能是你的线程有问题。
如果用到了jni,情况还要复杂!
gz
//Stop script for the CATALINA Server
//仅仅是停止tomcat server的脚本jvm由java.exe启动,并伴随java.exe退出而停止,而跟是通过什么方式启动java.exe的没有关系(你可以直接用输入命令"java",也可以通过tomcat运行jsp启动等等,想想jsp是如何执行的,你就很清楚“为何之后还有我的线程残留”这个问题了)java程序可以用java.lang.Runtime.exit(int) 方法显式终止当前运行的jvm。