最近开始做java项目,涉及多线程问题,有一事不太明白
网上说不推荐用thread.stop()
应该用thread.interrupt()但是实际中发现如果thread没有用到sleep(),是不能被catach到InterruptException的那我如果在thread中就是个while(true)的循环,而且里面没有用到Thread.sleep()但是我又想随时中断thread,而不是一个循环做完后通过一个while(stopped)来控制应该怎么做呢?

解决方案 »

  1.   

    或者你使用 Thread#isInterrupted() 方法,如果只想使用 while(true) 的话就甭想了,做不到。
      

  2.   

    可以尝试把while(true)中的true用一个变量保存起来,在while循环中控制循环的进行,然后在尝试对THREAD进行终止的操作
      

  3.   

    while(true){
       if(Thread.interrupted())
          break;
       //do sth here
       ...
       ...   
    }
      

  4.   

    boolean isTrue = true;while(isTrue){
     
      //do sth
    }
    //当要停止线程时,将
    isTrue = false;
      

  5.   

    如果线程正在处理数据,立即中断可能会导致错误数据
    所以使用while(stopped),设置stopped后,如果正在处理数据,在处理完后会退出当然,如果线程正在sleep,应该立即唤醒
      

  6.   

    今天第二次看到线程的问题。再说一次吧。永远不要用stop()。interrupt()是在有block method时用的,如sleep()。终结线程的唯一方法是让run()跑完。
      

  7.   

    使用一个标记变量标记while(true),如果希望停止则将标记赋值为false,即可,不要使用线程的强制方法,容易出现不可预期的错误.