设置正在运行的线程的属性

时间:2011-12-14 13:54:01

标签: java multithreading

public class ThreadStateVerifier {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        VerifyThread t = new VerifyThread() ;
        Thread th = new Thread(t) ;
        th.start() ; 
        for(int i = 0 ; i < 5 ; i++){
            if(i == 4)
            {
                t.setactive(false) ;
            }
        }
    }

}

class VerifyThread implements Runnable{

    private String message = "It is working" ;
    private volatile boolean active = true ;
    private static int i = 0 ;
    public void run(){
            try{

                for( ; active ; i++){
                    System.out.println("i is" + i);
                    Thread.sleep(1000) ;
                }
        }
        catch(InterruptedException ie){}
    }
    public static void setactive(boolean active){
        active = active ; 
    }
}

我想在线程实际运行时将active的值设置为false

当我运行此程序时,VerifyThread进入无限循环,即active未设置为false,尽管false的值设为main active 1}}显式。

如果我的方法有误,请建议采用正确的方法。目标是false的值应设置为VerifyThread,以便{{1}}稍后停止。

我不想使用任何存储active值的中间队列,因为它会成为内存的开销。

1 个答案:

答案 0 :(得分:2)

当您调用此方法时:

public static void setactive(boolean active){
    active = active ; 
}

您正在从参数变量进行冗余分配。要引用您需要的班级成员:

public void setactive(boolean active){
    this.active = active ; 
}

编辑:查看代码,我可以看到您尝试做的事情无论如何都无法正常工作。您正在并行启动一个线程,然后立即告诉它停止(执行5次循环迭代可以忽略不计)。您可能在控制台上看不到任何输出。

如果你能告诉我们你想做什么,也许我们可以帮你重新设计。