我如何从另一个线程中查询价值。
例如:我在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的评论后,这两个字段都变得不稳定,以便始终读取主值。

10-07 12:22