这几天在做一个关于thread的程序。但是对于线程不熟,还请大家赐教。
做了一个简单的例子。启动线程的时候开始计数(FOR循环中),现在看运行时间,如果时间大于6000的时候中止数数,为什莫没有中止掉,而是继续把数数完了呢。能不能提示一下该怎末做啊。

解决方案 »

  1.   

    把自己写的例子贴上
    public class ThreadTimeout extends Thread{

    public long startTimeMillis = 0;
    Thread thread;
    public ThreadTimeout(){

    this.startTimeMillis=System.currentTimeMillis();
    System.out.println("startTimeMillis"+startTimeMillis);
    }

    public static void main(String args[]){
    ThreadTimeout a=new ThreadTimeout();
    a.start() ;
    }

    public void run() {
    count();
    long accessTime = System.currentTimeMillis() - startTimeMillis;

    if(timeout(accessTime)){
    thread=null;
    }
    }

    private void count(){
    for(int i=0;i<1000000;i++){
    System.out.println(i);
    }
    }

    private boolean timeout(long accessTime){
    while(accessTime>60){
    String flag="1";
    System.out.println("flag "+flag);
    //a.stop();

    thread.interrupt() ;
    thread=null;
    return true;
    }
    return false;
    }
    }
      

  2.   

    while(accessTime>60){大于60ms。。
      

  3.   

    错误一:你的run里面是count()执行完,才会if(timeout(accessTime)){
    thread=null;
    };
    错误二:一中代码中的thread是什么,你自己清楚了吗?是否给它赋过值
    错误三:即使你的thread指到自身,但是thread=null就会停止线程吗?
      

  4.   

    to:cyfnjtu(迎风) 
    能不能帮我把代码修改一下,实现超时时停止线程,并且停止数数
      

  5.   

    public class ThreadTimeout extends Thread {    public long startTimeMillis = 0;
        
        public volatile boolean finished = false;    Thread thread;    public ThreadTimeout() {        this.startTimeMillis = System.currentTimeMillis();
            System.out.println("startTimeMillis" + startTimeMillis);
            start();
        }    public static void main(String args[]) {
            ThreadTimeout a = new ThreadTimeout();
            a.count();
        }    public void run() { 
            while(!finished){
            timeout();
            }
        }    private void count() {        
            for (int i = 0; i < 1000000; i++) {
                
                if (finished) {
                    System.out.println("finished");
                    break;
                }
                System.out.println(i);            
            }
        }    private boolean timeout() {
            long accessTime = System.currentTimeMillis() - startTimeMillis;
            while (accessTime < 600) {
                System.out.println("accessTime " + accessTime);
                return true;
            }
            finished=true;
            
            return false;
        } 
    }
      

  6.   

    TO cyfnjtu(迎风) 
    顺便问一句,用stop或者interupt不能真正的停止线程,而只能通过flag去强制停止?
      

  7.   

    public class ThreadTimeout extends Thread{

    public long startTimeMillis = 0;
    public ThreadTimeout(){

    this.startTimeMillis=System.currentTimeMillis();
    System.out.println("startTimeMillis"+startTimeMillis);
    }

    public static void main(String args[]) {
    ThreadTimeout a=new ThreadTimeout();
    a.start() ;
    }

    public void run() {
    count();

    }

    private void count(){
    for(int i=0;i<1000000;i++){
                             try{Thread.sleep(100);}
                             catch(Exception e)
                            {
                             }
    System.out.println(i);
                     long accessTime = System.currentTimeMillis() - startTimeMillis;
                     if(accessTime>2000)
                     
                       break;
                     
                     
    }
    }
    }
    这样应该可以了,加个sleep看的更清楚,