停止代码,直到满足条件
如何创建一个函数或组件等,在满足条件之前停止所有正在运行的代码?
例如,与JOptionPane相同的方式,如果我有这样的例子:
JOptionPane.showInputDialog(null, "Hello", "Title", 1);
在函数等中然后打印到控制台之后它将不会打印,直到我关闭JOptionPane。
我猜这个组件有内置的某种线程设置,但我怎么能用我自己的函数复制它?
所以说例如我想让JFrames延迟一切,直到它被关闭,所以它就像一个JOptionPane。
或者例如有一个具有多个输入的函数,这些函数已经更新,并且在内部对它进行了一些数学计算,如果它是某个值返回了一个布尔值,但是除了那些之外的其他所有内容都被暂停,直到返回真正的布尔值。
我猜测解决方案是某种线程设置,但我对Java很新,当我在过去编码时,我还没有真正使用过线程,所以我无法创建一个好的停止 – 启动/暂停 – 运行样式function系统。
有没有人有任何建议如何实现这个或更好的代码示例显示这种类型的东西工作?
你创建一个监视器(这只是一个简单的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
当然,有很多可能性,这只是一个版本如何做到这一点。
你试过让线程睡觉吗?
就像Thread.sleep(timeInMilliseconds)
一样简单Thread.sleep(timeInMilliseconds)
在这里查看