Azy759 2016-05-13 12:07 采纳率: 0%
浏览 2238
已采纳

java在一个主线程中开了很多小线程,当主程异常后,希望能关闭这些服务用的小线程,以免冲突。该怎么做

我是这样写的:
thread mainThread(){
while(true){
init;
try{
new serverThread1;
...
new serverThread2;
...
...
}catch(e){
...
if(flag_exit)break;
...
}
}
}

通常,这个主线程会经常遇问题,所以会抛出异常,因为有while(true),它会从头开始运行。
但是,再运行的时候,中间建立的小线程不知道主线程重启,会继续存在,主线程再次
建立它们,很可能会出现问题。
所以我希望主线程异常的时候,它们全部终止,以便再次启动。或者,有什么别的思路
可以完成这样的功能。谢谢啦!

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2016-05-13 12:57
    关注

    那么主线程和子线程之间就需要进行通信,java线程提供了interrupt()中断线程操作 的方法,可以让子线程的run方法在执行操作之前循环判断该标识,如果自己被主线程中断,就结束操作。
    参考代码:

    Thread t1= new serverThread1;
    
     Thread t2 = new serverThread2;
    
     如果异常了,就调用线程的中断操作:
     t1.interrupt();
     t2.interrupt();
     在对应的线程中
    

    serverThread2操作之前判断标识:

     public run(){
         while(!this.interrupted()){
    
              }
                //如果被外界主线程中断了,就结束循环。
    
     }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配