多线程处理中, stop()方法到底有什么隐患? 为什么我调用它强行终止线程后, 线程仍处于活动状态, 有什么其他办法可以强行终止线程的呢? interrupt()方法又是有什么用的呢? 和stop()有什么区别?另外, 如何把文件中所有的内容直接读到字符串中去? 我开始一行一行地读, 然后再用append()拼接起来, 但这样实在太慢了~等待高手打救~~

解决方案 »

  1.   

    中止线程的建议方法是自己设置一个锁, 比如线程可能像这样:
    while(stop) {
    //一些操作
    }
    stop是一个boolean型的变量, 如果想中止线程, 就把stop设置成false, 线程就结束了.
    stop()方法是不建议使用的, 因为可能导致死锁, 具体看Thinking in java.interrupt方法用来打断受阻的线程,  比如一个线程可能由于某种原因受阻了, 无法继续执行下去了, 可以用interrupt方法来唤醒, 可能会产生一个InterruptedException.
      

  2.   

    第二个问题读取文件:
    FileReader in = new FileReader("C:\\debug.log");
    char []buf = new char[10240];  //最多读取10k, 大小自行设定
    int len = in.read(buf);
    String str = new String(buf, 0, len);
    System.out.println(str);
      

  3.   

    用interrupt方法来唤醒Thread.sleep()的线程
      

  4.   

    第二个问题读取文件:
    用bufferedread()
      

  5.   

    多谢各位的帮助, 按照hemiao_1993(冷血动物), 问题已经解决了~另外, 如果我想限定一个线程运行的时间, 当超时时将强行终止该线程, 有什么好的办法解决呢?
      

  6.   

    另外, 如果我想限定一个线程运行的时间, 当超时时将强行终止该线程, 有什么好的办法解决呢?
    ----------------
    一样的, 超时就把线程锁调置成false就行了.
      

  7.   

    另外, 如果我想限定一个线程运行的时间, 当超时时将强行终止该线程, 有什么好的办法解决呢?
    ----------------
    一样的, 超时就把线程锁调置成false就行了.-----------------------------可是线程是顺序运行的, 不需要while循环, 例如在执行语句new URL(link).openStream()));
    时, 因为打开url的流可能很慢, 如果网络没连上的话, 可以要等上十秒它才会产生IOException, 如果我规定它五秒打不开, 就终止它, 怎么办呢?
      

  8.   

    其实要退出线程,你可以自定义一个标量,
    while(go){
    //做你自己的事情
    }
    如果你想退出线程的话,只要把go改为false就可以了
      

  9.   

    lbfhappy(千里冰封): 对于下列代码, while(go){ 1; 2; 3; 4; }, 如果语句2是new URL(newurl).openStream();, 假如该语句执行要很久, 我想在该语句的执行过程中, 就终止该线程有什么办法呢? 而while循环是必须要等到所有语句都执行完之后再判断的, 由于语句甚多, 又不可能在每条语句后面都加上if(!go) break;语句来判断是否终止线程.不知道还有什么好的方法~~