gpt4 book ai didi

java - 停止代码直到满足条件

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:23 24 4
gpt4 key购买 nike

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

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

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

在一个函数等中然后打印到控制台之后它不会打印直到我关闭 JOptionPane。

我猜这个组件内置了某种线程设置来执行此操作,但我如何才能用我自己的函数复制它?

例如,我想让 JFrames 延迟一切,直到它关闭,这样它就像一个 JOptionPane。

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

我猜解决方案是某种线程设置,但我对 Java 很陌生,过去编写代码时我并没有真正使用过线程,所以我无法创建良好的停止-启动/暂停-运行样式函数系统呢。

有没有人对如何实现这一点有任何建议,或者更好的代码示例显示了这种类型的工作?

最佳答案

您创建一个监视器(它只是一个简单的对象)

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

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

关于java - 停止代码直到满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com