我如何从另一个线程中查询价值。
例如:我在ThreadA中有一个方法,该方法调用另一个Thread(ThreadB)的方法。我需要使用某种轮询机制,以便每隔5秒我应该能够检查该方法的返回类型(字符串)的值,并且基于该值(例如SUCCESS / FAILURE),我应该能够杀死ThreadB。
怎么办..请帮助。
这可以通过Observer模式完成,但是现在有了很小的变化-我每5秒轮询一次threadB的值。但是ThreadB的值仅在10分钟后才会更改。在这里,我的问题是每5秒如何获取ThreadB的值而无需每次都调用它。 ThreadB只能被调用一次。
最佳答案
这是一个例子:
public class Blofeld extends Thread {
private volatile boolean isBombDefused;
private volatile int count = 10;
public void run() {
System.out.println("Blofeld starts countdown");
while (!isBombDefused) {
System.out.println(count + " seconds and counting...");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
if (count <= 0) {
System.out.println("This is the price of failure...");
throw new RuntimeException("BOOOOM!");
}
}
System.out.println("Mr. Bond! Mr. Bond! We can do a deal!");
}
public int getCount() {
return count;
}
public void cutRedWire() {
System.out.println("SNIP!");
isBombDefused = true;
}
}
public class Bond {
public static void main(String[] args) throws InterruptedException {
Blofeld blofeld = new Blofeld();
blofeld.start();
while (blofeld.getCount() > 007) {
Thread.sleep(1000);
System.out.println("Bond works frantically");
}
blofeld.cutRedWire();
}
}
编辑:在来自artbristol的评论后,这两个字段都变得不稳定,以便始终读取主值。