4

如何创建一个函数或组件等来停止所有正在运行的代码,直到满足条件?

例如,与 JOptionPane 相同的方式,如果我有这个,例如:

JOptionPane.showInputDialog(null, "Hello", "Title", 1);

在函数等中,然后打印到控制台,直到我关闭 JOptionPane 才会打印。

我猜这个组件有某种内置的线程设置来做到这一点,但我怎么能用我自己的函数复制它呢?

所以比如说我想让 JFrames 延迟一切,直到它被关闭,所以它就像一个 JOptionPane。

或者例如有一个函数,该函数有多个输入,这些输入得到更新,并且在它内部对这些输入进行了一些数学运算,如果它是某个值,则返回一个布尔值,但除此之外的所有其他内容都被暂停,直到返回真正的布尔值。

我猜解决方案是某种线程设置,但我对 Java 还很陌生,当我过去编写代码时,我并没有真正使用过线程,所以我还不能创建一个好的停止-启动/暂停-运行风格的功能系统。

有没有人有任何建议如何实现这个或更好的代码示例来显示这种类型的事情?

4

2 回答 2

8

您创建一个监视器(这只是一个简单的Object

public static final Object monitor = new Object();
public static boolean monitorState = false;

现在你创建一个等待方法

public static void waitForThread() {
  monitorState = true;
  while (monitorState) {
    synchronized (monitor) {
      try {
        monitor.wait(); // wait until notified
      } catch (Exception e) {}
    }
  }
}

以及解锁服务员的方法。

public static void unlockWaiter() {
  synchronized (monitor) {
    monitorState = false;
    monitor.notifyAll(); // unlock again
  }
}

所以当你想做一些花哨的事情时,你可以这样做:

new Thread(new Runnable() {
  @Override
  public void run() {
    // do your fancy calculations
    unlockWaiter();
  }
}).start();

// do some stuff    
waitForThread();    
// do some stuff that is dependent on the results of the thread

当然,有很多可能性,这只是一个版本的如何去做。

于 2012-08-23T14:51:44.250 回答
1

你试过让线程休眠吗?

简单到Thread.sleep(timeInMilliseconds)

在这里检查

于 2012-08-23T15:00:43.670 回答