线程终止问题

问题描述

我得思路是这样的:我在主线程调用线程b和方法1方法1调用线程a执行业务逻辑b检测业务逻辑是否执行,如果业务逻辑没有执行,就调用方法1代码大概就是:dosavefixedRepublish(siteid);//方法1monitortrd=newThread(newThreadStart(this.monitorThread));线程bmonitortrd.IsBackground=true;monitortrd.Start();//////////////////////dosavefixedRepublish(stringsiteid)//方法1{newstrd=newThread(newThreadStart(this.republishPage));线程a执行业务逻辑newstrd.IsBackground=true;newstrd.Start();}privatevoidmonitorThread()线程b{while(true){if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)dosavefixedRepublish(staticsiteid);//方法1Thread.Sleep(30*60*1000);}}现在问题是:正确运行大概24小时左右后,monitorThread好像突然终止了。我做的可是死循环啊。

解决方案

解决方案二:
有疑问者请跟贴或者和我qq联系,105163970急盼解决啊。
解决方案三:
不应该啊!
解决方案四:
是啊,我也奇怪的很了。自己本地调试一直都没有问题啊。
解决方案五:
你已经让线程Sleep呀
解决方案六:
是否和这个判断有关呢?if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)
解决方案七:
if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)这句你要干嘛。你把证实monitorThread停止的测试代码也贴出来看看,你给的这个部分太精简了
解决方案八:
从你描绘的情景来看,应该没什么问题,线程b不应该停止.既然问题出现,我就胡乱猜测:1、不明白你是怎么"检测业务逻辑是否执行"?2、dosavefixedRepublish(staticsiteid);//方法1执行失败,也就是我猜测,是不是创建线程失败?或者一直处于创建不出线程导致b线程挂住!3、this.republishPage没有执行完毕,线程挂住,累计,资源消耗完毕!!总的来说,你描绘的流程情景没问题,我以上3点归纳起来,就是怀疑你线程b内某一步(函数)处理有问题,导致b停止不执行。希望有帮助!
解决方案九:
线程b只是执行检查功能,方法1中的republishPage()是个反复链接ftp的操作。执行文件的上传功能。这个程序本身的目的是执行页面的静态化操作。republishPage()privatevoidrepublishPage(){while(true){try{//ftp操作}catch(Exceptionex){Thread.Sleep(5*60*1000);savePublicLogFiles("静态发布所有页面异常,可能是数据库异常",ex.Message,"");}}}本来是没有线程b执行监控操作的,就靠republishPage这个死循环来执行静态发布。但是仍然是大概过20几个小时就会线程异常终止。异常的抛出点是ftp链接异常,导致线程a终止。后来为了解决这个问题引入线程b,目的就是检查页面是否生成,DateTimedt=UpLoadFile.FileManageNew.getFileDate("",filename,ftpaddress,refstrMsg);if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)dosavefixedRepublish(staticsiteid);//方法1问题就是ftp运行几十小时后会异常终止。信息是,正在中止线程。远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)
解决方案十:
文件不可用那问题应该是在你操作文件的部分发生的啊,你应该找那部分的原因。
解决方案十一:
DateTimedt=UpLoadFile.FileManageNew.getFileDate("",filename,ftpaddress,refstrMsg);这个操作是在线程b执行的吧,检查一下是不是会异常啊。
解决方案十二:
dosavefixedRepublish这个方法里报错了,导致线程终止了,估计,否则不应该会这样,你把这个方法加上trycatch,然后把错误打印出来,后台线程抛异常不不捕获的话,它就直接抛给了操作系统了,所以你看到的现象就是线程终止了但没报错,你可以查下系统日志看看有没有错。
解决方案十三:
异常都捕获了。并且都忽略了,目的就是为了实现死循环。譬如线程b,即使连接ftp发生异常,我也不希望线程b异常中止。已经加了try和catch了.。monitortrd=newThread(newThreadStart(this.monitorThread));线程bmonitortrd.IsBackground=true;monitortrd.Start();//////////////////////privatevoidmonitorThread()线程b{while(true){try{if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)dosavefixedRepublish(staticsiteid);//方法1Thread.Sleep(30*60*1000);}catch(Eeceptionex){}}}
解决方案十四:
你的dt从哪里来的?
解决方案十五:
你的代码只有一段,怎么看啊,要么是线程发生异常,要么是主线程挂了
其他方案:
全部代码有1千多行。问题就是线程a调用的方法republishPage里面有ftp链接,其中ftp链接异常导致线程终止,从而导致创建线程a的监控线程b停止。我的用意是b永不停止。怎么解决这个问题啊?
其他方案:
up
其他方案:
把您调用ftp的代码贴出来
其他方案:
哎,不折腾了。线程b不掉用ftp了,直接没过十几个小时,强行更新得了。
其他方案:
republishPage逻辑错误会影响线程执行的.try..catch
其他方案:
while(true){try{if(dt.AddMinutes(40).CompareTo(DateTime.Now)<0)dosavefixedRepublish(staticsiteid);//方法1}finally{Thread.Sleep(30*60*1000);}}

其他方案:
肯定是有操作出异常了
其他方案:
楼主已经捕获了所有异常了,但是是否有这种情况,某个错误发生后,线程会自己关闭后再抛出异常呢?

时间: 2024-09-09 18:56:38

线程终止问题的相关文章

Java多线程:“基础篇”09之interrupt()和线程终止方式

1. interrupt()说明 在介绍终止线程的方式之前,有必要先对interrupt()进行了解. 关于interrupt(),java的djk文档描述如下: http://docs.oracle.com/javase/7/docs/api/ Interrupts this thread. Unless the current thread is interrupting itself, which is always permitted, the checkAccess method of

c语言-linux C 线程终止问题,着急,求各位大神帮忙

问题描述 linux C 线程终止问题,着急,求各位大神帮忙 include #include #include static int run = 1; static int retvalue; void *start_routine(void *arg){ int *runing = arg; printf("The child thread has been inited,the arg is: %dn",*runing); while(*runing){ printf("

xml-XML大文件流解析 线程终止

问题描述 XML大文件流解析 线程终止 最近开发一个xml文件流解析项目(web) 对方发送xml格式文件流 我方获取并进行解析入库 我写了2中方案 去获取文件流并解析 第一种 Stream m_Stream = Request.InputStream; if (m_Stream.Length > 0){ XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(m_Stream); XmlElement xmlRoot = xmlDoc.Docum

java线程问题-java,线程终止问题,线程设置静态后,每次点击后原来的线程不能消失

问题描述 java,线程终止问题,线程设置静态后,每次点击后原来的线程不能消失 package com.radio.weather.view; import javax.swing.*; import com.radio.weather.model.*; import java.util.*; import java.awt.event.*; import java.awt.*; public class WeatherFrame extends JFrame implements Action

c语言线程终止练习示例_C 语言

复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <pthread.h> void *t1(void *args) { return (void *) 0;} void *t2(void *args) { printf("thread 2 param[args] = %d\n", args); pthread_exit((void *) 3);} void *t3(void *args)

详解Java多线程编程中线程的启动、中断或终止操作_java

线程启动: 1.start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用. run() : run()就和普通的成员方法一样,可以被重复调用.单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程! 下面以代码来进行说明. class MyThread extends Thread{ public void run(){ ... } }; MyThread mythread = new

java线程技术——线程的创建运行终止

http://blog.chinaunix.net/uid-122937-id-192835.html 1.创建和运行线程在Java中,多线程的实现有两种方式:      扩展java.lang.Thread类      实现java.lang.Runnable接口 (1)扩展Thread类      Thread Test = new Thread();      Test.start(); (2)实现Runnable接口将实现Runnable接口的类实例化            Test i

3线程的终止方式,线程属性,NPTL

 1线程终止方式 如果需要只终止某个线程而不终止整个线程,可以有三种方法: A:从主线程函数return.这种方法对主线程不适合,从main函数return相当于调用exit. B:一个线程可以调用pthread_cancel终止同一进程中的另一个线程. C:线程可以调用pthread_exit终止自己   同一个进程的线程间,pthread_cancel向另一个线程发终止信号.系统不会马上关闭被取消线程,只有在被取消线程下次系统调用时,才会真正结束线程.或调用pthread_testcan

解析C/C++中如何终止线程的运行_C 语言

想要终止线程的运行,可以使用以下方法: 1.线程函数返回(最好使用该方法). 2.通过调用ExitThread函数,线程将自行撤消(最好不使用该方法). 3.同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法). 4.ExitProcess和TerminateProcess函数也可以用来终止线程的运行(应避免使用该方法). 下面将详细介绍终止线程运行的方法:1-4,并说明线程终止运行时会出现何种情况:5. 1.线程函数返回 始终都应该将线程设计成这样的形式,即