我有这个代码样本。但是每次我运行它,它都不会等到我的条件是真的--,我需要这个Thread
像一个东西,不断地寻找直到条件为真。
我的条件是:sum.contains(jLabel11.getText())
我需要Thread
来工作,直到这个条件变为真为止。使用while(true)
语句执行此操作,但有时它会成为程序的一个坏条件,因为它将持续打印和打印数千行(在我的例子中:“还不相等”),直到if
语句中的条件是true
为止。
但是我确实需要这个Thread
一遍又一遍地查看,直到我在if
语句中的条件是true
,而没有在else condition
中打印statement
一千次,也没有在if condition
中打印statement
一千次,即使在if statement
中的条件为真之后。但是我只需要打印statement
I if
语句一次就可以知道我的病情变成了true
new Thread() {
public void run() {
try {
Thread.sleep(100);
if (sum.contains(jLabel11.getText())) {
System.out.println("Now equal");
} else {
System.out.println("Not equal yet");
}
} catch (InterruptedException ex) {
Logger.getLogger(AlarmClock.class.getName()).log(Level.SEVERE, null, ex);
}
}
}.start();
发布于 2017-05-08 10:48:40
解决方案看起来很简单,只需添加while(true),如果它在条件中中断执行,在时间和线程中退出,如下所示:
new Thread() {
public void run() {
try {
while (true){
if (sum.contains(jLabel11.getText())) {
System.out.println("Now equal");
break;
}
}
} catch (InterruptedException ex) {
Logger.getLogger(AlarmClock.class.getName()).log(Level.SEVERE, null, ex);
}
}
}.start();
现在,正如在其他答案中所解释的,这被称为自私的线程,它比监视器或其他类似事件的模式需要更多的资源。
在新体系结构(SMP =对称多处理器)上,自私的线程不是一个问题。但是,有些体系结构确实是一个问题(例如MPP大规模并行处理器体系结构)。
现在,关于你说的话:
它不会等到我的条件是真的我
似乎你的主线程在你正在创建的新线程之前就已经接近尾声了。
例如,如果单元测试(JUnit)中有该代码,则必须将一个thread.sleep放置到条件满足时,或者放置一个sum.contains(jLabel11.getText())来对其进行单元测试.
否则,主线程将完成,其所有子线程都将随之终止。
发布于 2017-05-08 10:33:25
那就这样做吧:
while(!(sum.contains(jLabel11.getText())){
Thread.yield();
}
System.out.println("Now equal");
https://stackoverflow.com/questions/43854819
复制相似问题