我在 Java中开启一个线程 怎样安全杀死.当然不能用stop方法.Thread t = new Thread(){
     public void run(){
    URL m_URL = new URL( resourceURL );
            HttpURLConnection connection = ( HttpURLConnection ) m_URL.openConnection();
            connection.setConnectTimeout( 30000 );
            connection.setDoInput( true );
            InputStream input = connection.getInputStream();
     }
};
t.start();我在网路不通的情况下,需要等待30秒才能 捕获然后结束线程,
我怎样在任何时候都能杀死这个线程呢 ?

解决方案 »

  1.   

    你查一下java.util.concurrent包中相关API。
    如ScheduledThreadPoolExecutor,ThreadPoolExecutor等。
      

  2.   

    用thread.interrupt()
    或ThreadPoolExecutor.shutdown()
      

  3.   


    public class Test extends Thread {
        private String name;
        
        public Test(String name) {
            this.name = name;
        }
        
        public void write() {
            System.out.print(name);
        }
        
        public static void main(String[]args) throws Exception{
         Thread  t1=new Test("myThread");
         t1.start();
         Scanner sc=new Scanner(System.in);
         String s;
         while((s=sc.next()).equals("stop")){
         t1.interrupt();
         break;
         }
         } 
        
       
        public void run() {
                    for(int i=0;;i++){
                    if(this.isInterrupted()){
                     System.out.println("exit*****************");
                     return;
                    }
                 write();
                 System.out.println();        }
        }
        
    }
      

  4.   

    继承java.lang.ThreadDeath 类...
      

  5.   

    设置一个flag标识位,初始化为false,如果想杀死线程了就将它改为true,在线程中定期或者循环判断flag的状态,如果为true就return就可以了.
      

  6.   

    设置什么标志,线程类已经弄好了标志,就用isInterrupted()不就ok了。
      

  7.   

    lz太高深了。杀进程的意思就是直接杀死,怎么可能还估计程序运行状态呢。比较困难。
    java目前不建议直接自己结束进程,而是根据一定的条件结束进程。
    你这个写吗基本上没法办,因为你这个额线程执行一次就退出了,结束执行只能造成一些问题。那些无限循环的还比较好办
      

  8.   

    楼上都该说的已经说了。要不楼主你就用不推荐的stop吧,呵呵。
      

  9.   

    interrupt() 
    java核心技术高级特性第一章就有写
      

  10.   

    建议你用标志,Java是有一个中断线程的interrupt方法,不过这个方法,并不是马上中断,它什么时候中断是无法预测的
      

  11.   

    interrupt() 只是一个标记的改变,另外如果线程在slepp,wait会抛出InterruptedException异常而已.你需要的是在connection.setConnectTimeout( 30000 );后立刻检查needStop的标志位即可.