java 多线程假死按键假死怎么处理

& & 某站点以java开发,运行在tomcat上,但因某些原因,java时不时假死或者自动停止。为了防止这个问题,临时采取定期检查该站点url的方式判断tomcat的运行情况。其基本思路为:当取得到带jsp后缀文件的url状态码不是200时,强制重启tomcat。用crond每隔一段时间执行一次检查。& & 脚本内容为:& & #!/bin/bash& & n=`curl -I -s /error.jsp&|grep "200 OK" |wc -l`& & if [ $n -ne 1 ]& & then& & source /etc/profile& & /usr/local/tomcat_push/bin/catalina.sh stop& & /usr/local/tomcat_push/bin/catalina.sh start& & fi摘自 sery
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.002 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益java如何终止线程
对于线程的终止或者中断,由于java中Thread.stop方法已经被弃用,如何终止一个线程,成为了一个挑战,不仅仅要考虑终止的条件也要考虑终止后的收尾工作。
大部分情况下,我们可以通过自己设置的标识例如m_stop布尔变量来,这样写run方法
public run ()
& while(!m_stop)
&& //add your works here.
然后可以自己写一个Stop方法在里面将m_stop改变,就可以达到终止线程的目的。
但是如果在你的线程中,就是while循环中出现阻塞(大部分情况是wait,sleep或者IO阻塞等等),线程就停在里面,我们就无法通过判断m_stop的值来终止线程了。
这样我们可以通过另一种方式,调用interrupt()方法,这个方法是比较特别的,
通过测试,interrupt方法实现了这样的功能:
如果线程当前在sleep和wait状态下,会清除interrupt status, 并同时抛出异常.
而在非sleep和wait状态下,就会表明自己为interrupt status.
我们可以通过isInterrupted方法获得interrupt status。
也就是说如果线程处于阻塞状态,而且我们改变m_stop的值已经不起作用的时候,我们可以通过异常来终止线程。也就是在Stop方法里调用interrupt()方法,如果线程当前处于阻塞状态会产生一个异常。
&&& public void run() {
&&&&&&& while ( !m_stop) {
&&&&&&&&&&& System.out.println( &Thread running...& );
&&&&&&&&&&& try {
&&&&&&&&&&&&&&& Thread.sleep( 1000 );
&&&&&&&&&&& } catch ( InterruptedException e ) {
&&&&&&&&&&&&&&& System.out.println( &Thread interrupted...& );
&&&&&&&&&&& }
&&&&&&& System.out.println( &Thread exiting under request...& );
这样可以通过catch子句跳出run方法,从而终止线程。
终止线程的方法
1、通过标识设置,跳出while循环
2、通过异常跳出run方法。
摘自 Central-Perk的专栏
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'多线程下切换输入法导致程序假死的问题
今天无意中发现程序在切换输入法的时候假死,郁闷,以前也是这么用,没出问题,今天就不行了,查了很多资料,无解,问了好几个高手,都没遇到过,最后终于找到了一篇好文章解决了我的问题,赶紧发上来。&多线程程序切换输入法导致死机的问题及解决方案书呆子&&&&&& 曾经在一个数据库项目中碰到了一个问题,在线程中创建了ADOConnect读取数据再进行处理,结果当切换输入法时整个程序就死机了。当时非常困惑,在大富翁里也发了帖子,最终都得不到解决,最后经过不断的调试终于知道了问题的原因。近日,见到大富翁里依然还有人被这个问题所困扰,于是写了我的经验心得,希望能够帮助需要的人。问题产生过程:&&&&&& 问题产生的过程是这样的,普通的线程由于里面根本就没有窗口,所以创建后,切换输入法是不会对其造成影响,但是,当线程里存在窗口时,切换输入法就会导致死机。这是因为,窗口是和线程相关的,在线程里创建的窗口,窗口的消息循环需要所属线程来处理,在DELPHI中大部分窗口都是创建在主线程里,Application里的ProcessMessage方法处理了主线程的消息队列。但是TThread里并没有内建消息循环,当输入法切换时发送了系统通过SendMessage发送了WM_IME_SELECT消息给线程里的&Default Ime&窗口通知它输入法已经切换,由于SendMessage是不同线程调用,所以不会直接去访问窗口的消息函数,而是等待目标线程主动获取消息时再去调用窗口的消息函数返回。问题就出来了,目标线程中根本就没有消息循环,从而导致了死锁。演示代码如下:&TForm1 = class(TForm)& Button1: TB& procedure Button1Click(Sender: TObject);private&&&&& { Private declarations }public& &{ Public declarations }&TTest = class(TThread)&private& procedure ProcessMprotected& procedure Evar& Form1: TForm1;implementation&{$R *.dfm}&procedure TTest.Ebegin& TTimer.Create(nil);&& //这个对象创建不为什么,只是为了创建一个隐藏的window,屏蔽这句话线程里就没有窗口了,也不会死机& while not Terminated do& begin&&& //&& ProcessM&& //去掉这一句就会导致死锁&&& Sleep(100);&&///内建的一个简单消息循环procedure TTest.ProcessMvar& Msg: TMbegin& if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then& begin&&& TranslateMessage(Msg);&&& DispatchMessage(Msg);&&procedure TForm1.Button1Click(Sender: TObject);begin& TTest.Create(False);&结语&&&&&& 这个问题我认为系统在发送消息的时候是不是应该使用SendMessageTimeout,这样即使我们这些粗心的程序员不处理,也不至于一直死机。嘿嘿~~~&
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
打开搜狗安装目录,例如E:\SogouExplorer\6.0.5.17804\wkdlls\PepperFlash 找到pepflashplayer.dll这个文件将其重命名即可. 本文出自 &我还活着呢& 博客,请务必保留此出处http://hujizhou./0235
近日在开发类似QQ屏幕截图过程中,发现在输入文字时切换输入法(Ctrl+Shift)时,会导致程序出现&卡死&现象.为了方便代码重用,屏幕截图模块是以动态库方式封装起来的.出现&卡死&现象后,只能通过任务管理器强制杀掉对应的进程才能退出程序.于是,上网搜索了相关话题,发现原因通常是某种输入法如紫光或搜狗 ...
function TCFADODBStorage.OpenConnection: B //线程里打开ADOConnection,在XP下切换输入法程序会死掉 //原因:ADO自动创建一个ADODB.AsyncEventMessenger窗口,然后会有一个对应的IME窗口,但线程里没有消息循环 // XP下输入法切换时会SendMessage给I ...
1.问题描述 在使用net-snmp对交换机进行扫描的时候经常会出现进程假死的情况(就是进程并没有死掉,但是看不到它与外界进行任何的数据交互).这时候不知道进程内部发生了什么,虽然有日志信息,但进程已经很长时间没有动静,根本不知道这段时间做了什么.用gdb att进去发现,进行snmp发送的线程已经被阻塞了.但是阻塞的情况并不是每次都发生,而是经常发生,这就 ...
重装vista之前有个朋友看到我的系统盘分区大小,跟我说&你的C盘怎么那么小,我的装vista30G,现在只剩7G了&,当时我还说他&你肯定是乱放东西了&,现在才发现,错的是我,真是对不起.-_- 因为我的C盘才分了20G,windows系统的补丁又多又大,重装没两天就发现硬盘吃不消了,关了系统还原还是无法满足,所以没 ...
今天 ,遇到这样一个怪现象,在维护企业内的一台机子的过程中,表现出来的故障是,当用户打开网页或任何的资源管理器窗口时,连按几下&ctrl+shift&切换输入法时,会自动关闭当前所打开的任何窗口.遇到这个问题,最先想到的是输入法和病毒,发现用户装了好几个输入法,其中就有搜狗拼音输入法.QQ拼音输入法,王码五笔等等.我感觉是输入法的问题,于 ...
前些天从微软官网(中国)下载了vs2008的90天试用版,安装很顺利.但使用时发现,从源视图向设计视图切换时,界面出现了假死现象,重装后亦无效.我从网上搜索原因,发现很多朋友都有类似的问题,但解决方案各异,原因更是众说纷纭.下面我就我所看到的和我的切身经历,对vs2008设计视图假死的原因及解决方案总结如下.
在这之前先说明下,有些朋友出现此 ...
在GIS数据处理中,数据量大是一个非常伤脑筋的问题.最近,在写一个CAD注记转Shapefile文件时,又遇到这个问题.
曾经处理一次数据,达130万个点,即测试区域内的栅格转成点全部处理,程序是写好了,但速度之慢啊,关键问题是处理到一半报奇怪的错误,最后只好将数据分成6份,去实验室开了6台机子来分别处理,最后合成在一起.经历过这件事后,我就去请教老 ...java多线程(6)
先来看下下面这段测试代码
public class Run {
public static void main(String[] args) throws InterruptedException {
Thread2 b = new Thread2();
b.setName(&t1&);
b.start();
Thread.sleep(2000);
System.out.println(&main finished&);
class Thread1 extends Thread {
public void run() {
for (int i = 0; i & Integer.MAX_VALUE; i++) {
String newString = new String();
Math.random();
class Thread2 extends Thread {
public void run() {
Thread1 a = new Thread1();
a.start();
System.out.println(&begin join & + Thread.currentThread().getName());
System.out.println(&end join&);
} catch (InterruptedException e) {
e.printStackTrace();
}运行main函数后,正常来说一定会在2秒(main中sleep的时间)后输出下面的结果
begin join t1
main finished但是等了很久,只输出了begin join t1,而main函数迟迟没有结束
在Thread1启动后,几乎所有的cpu时间片都花费在Math.random()这行上,而没有时间回到主线程
所以,解决方法是:让CPU除了生产随机数,再做点其他事情,让主线程得到机会运行
简单修改一下代码,原先new String没有传参数,JVM可能会认为是无效代码不做处理,这是-server模式下的一个优化,现在加了参数,JVM认为需要开辟内存,在这个过程中,CPU时间片被拆分,分给了主线程
String newString = new String(&& + i);现在再次运行,发现可以正常输出main finished了,当然实际开发过程中,也可以使用其他方式去拆分CPU时间片
本案例基于JDK1.8u91 server模式
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:211111次
积分:2442
积分:2442
排名:第10884名
原创:44篇
转载:50篇
评论:24条winform 多线程 UI假死问题
[问题点数:20分,结帖人duxcms]
winform 多线程 UI假死问题
[问题点数:20分,结帖人duxcms]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 java 多线程假死 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信