gpt4 book ai didi

java - 使用构造函数内联运行?

转载 作者:行者123 更新时间:2023-12-02 00:35:39 26 4
gpt4 key购买 nike

我正在寻找使用线程在后台处理某些内容。由于这段代码没有在其他地方使用并且并不复杂,所以我想使用内联函数。但是,该函数需要一个属性的副本在创建线程时,即:如果以下示例的输出为“true”而不是“false”,我希望如此

public class InlineThreadTest {
boolean value;

public static void main(String[] args) {
new InlineThreadTest();
}

InlineThreadTest() {
value = true;
java.util.concurrent.Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
System.out.println(value);
}
});
value = false;
}
}

...我可以通过创建一个实现 Runnable 的单独类来完成我想要做的事情,但是拥有这个内联似乎可能是件好事。

我看了@ https://stackoverflow.com/a/362443/64696 ,但无法弄清楚如何将其塑造到我的用例中。

最佳答案

Runnable 实现是一个线程,线程不会返回任何值。 ExecutorService.execute方法只是运行线程,你无法获取线程的状态,无论它是否被执行。如果您想检查 ExecutorService 执行的任务(而不是线程),您应该使用 Callable 并使用 sumbit()。您修改后的示例:

public class InlineThreadTest {
boolean value;

public static void main(String[] args) {
new InlineThreadTest();
}

InlineThreadTest() {
value = true;
java.util.concurrent.Future<Boolean> f =
java.util.concurrent.Executors.newSingleThreadExecutor().submit(new Callable<Boolean>() {
public Boolean call() {
System.out.println(value);
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
value = false;
return value;
}
});
try {
System.out.println(f.get()+" or value="+value);
} catch (Exception ex) { }
}

}

您将得到 2 行

true
false or value=false

关于java - 使用构造函数内联运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977583/

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