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 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办