在主线程中启动了一个子线程先已知子线程被阻塞,是因为url连接建立,阻塞在读取数据方面,因此通过标识符判断使子线程自动结束的方法无法使用了先就请教,如何在主线程中直接kill掉这个子线程了使用了
t.stop()//t为子线程引用
或者
try {
t.sleep(300);
} catch (InterruptedException x) {
t.interrupt();//中断线程
}
2个方法均无法直接kill掉线程t,因为在执行方法之前之后,执行t.isAlive()均为true不知道现在有没有其他别的方法能够使用了

解决方案 »

  1.   

    Thread th = new Thread() {
    public void run() {
    boolean exit = false;
    while (!exit) {
    try {
    sleep(300);
    } catch (InterruptedException x) {
    exit = true;
    }
    }
    System.out.println("exit....");
    }
    };
    th.start(); try {
    Thread.sleep(5000);
    } catch (InterruptedException e) {
    }
    th.interrupt();
      

  2.   

    在读数据的那个线程方法中加个判断,如果标志为真,则 sleep(). or interrupt()
      

  3.   

    现在的问题就是阻塞了之后无法使用标志的方式来控制子线程退出我的子线程是找到一个url地址,然后读取数据过来,url找到之后,连接正常,connect没有报错,然后因为没有数据获得,所以一直阻塞在这里,已经试过可以阻塞下去...= =!所以现在要通过主线程来kill子线程,希望能有个像unix那样直接kill进程的方法就好了或者能有个在读取数据的时候能设置timeout么?多少时间没有读取数据则抛出异常,这样的话也可以解决我的问题了
      

  4.   

    一个线程的run()方法结束,它的生命也走到了终点。
    要在主进程中,控制线程的存活,控制run()方法便可,常用的方式是:
    public void run() {
        while(flag) {
            ....
        }
    }控制flag(boolean)的值,便可以控制这个线程的存活。
      

  5.   

    抱歉,没看清题目。线程sleep状态下,Interrupt掉它,会抛出InterruptedException的。
    记得Thread类有一个静态方法,判断该线程是否正占用当前cup资源。
      

  6.   

    网络读写阻塞果然用URLConnection.setReadTimeout不错,很好用放一天,明天来结贴给分