日期:2014-05-20  浏览次数:20711 次

线程终止问题,急问
大家好...............

    |----------------------->
    |         子线程1                         |
    | <----------------------
主|
    |---------------------->
线|         子线程2                       |
    | <----------------------
    |
程|
    |
    |---------------------->
    |         子线程2                       |
    | <----------------------
    |
现在正在做一个Java的Application,遇到了这样一个问题.

主线程管理三个子线程,主线程用到了Timer类,定时同时起动三个子线程.

现在做好了冷关闭,就是界面按钮按下后,设置一个状态FLAG,主线程时间到了需要启动子线程的时候,发现状态FLAG不能再启动新线程了,但是要等待正在执行中的三个子线程,执行完毕.

但是在做热关闭的时候,出现了问题,虽然状态FLAG不能再启动新线程了,但是前面已经开始了的子线程,没办法被杀掉.

这个问题困扰着,很郁闷.....

前提一,主线程不关闭.
前提二,子线程只运行一次(里没有循环),下次timer到的时候,再启动一个新的子线程.

------解决方案--------------------
destroy?
------解决方案--------------------
1.线程本身有关闭销毁的方法.
2.通过共享变量,也可以在线程内部判断该变量是否是要求本线程结束而自行结束.
------解决方案--------------------
已前是有destory()的方法,但是现在好像不提倡用这个方法.好像是用sleep或interrupt,让他终止,自动销毁
------解决方案--------------------
但是在做热关闭的时候,出现了问题,虽然状态FLAG不能再启动新线程了,但是前面已经开始了的子线程,没办法被杀掉
以前也做过一个类似的控制线程的东西,这个问题可以这样解决,判断这个子线程是否在运行,如果在运行的话就不用去执行了(或者杀死在运行新的)==> 但是问题也随之出现,操作线程!那就要
看LZ用的是社么操作系统,如果是WIN,那只能说SORRY了~~你没法去操作除非你去JNI(主要是没有好的开源的东东).如果是LINUX,那先恭喜一下,你可以执行SHELL来判断线程是否存在,如果数据量过大的话就保存到文本,APP去读文本来判断线程是否已在运行
------解决方案--------------------
多线程管理用线程组来做