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值的中间队列,因为它会成为内存的开销。
答案 0 :(得分:2)
当您调用此方法时:
public static void setactive(boolean active){
active = active ;
}
您正在从参数变量进行冗余分配。要引用您需要的班级成员:
public void setactive(boolean active){
this.active = active ;
}
编辑:查看代码,我可以看到您尝试做的事情无论如何都无法正常工作。您正在并行启动一个线程,然后立即告诉它停止(执行5次循环迭代可以忽略不计)。您可能在控制台上看不到任何输出。
如果你能告诉我们你想做什么,也许我们可以帮你重新设计。