给定以下使用多线程的Java示例:
import java.util.concurrent.*;
public class SquareCalculator {
private ExecutorService executor = Executors.newSingleThreadExecutor();
public Future<Integer> calculate(Integer input) {
return executor.submit( () -> {
Thread.sleep(1000);
return input * input;
});
}
public static void main(String[] args) {
try {
Future<Integer> future = new SquareCalculator().calculate(10);
while (!future.isDone()){
System.out.println("Calculating...");
Thread.sleep(300);
}
Integer result = future.get();
System.out.println("we got: " + result);
} catch(InterruptedException | ExecutionException e) {
System.out.println("had exception");
}
}
}
它产生:
java SquareCalculator
Calculating...
Calculating...
Calculating...
Calculating...
we got: 100
但应用程序永远不会终止。
我是不是该加入这条线什么的?
您需要在程序快结束时关闭executor framework,并等待它正常终止。。
executor.shutdown();
try {
executor.awaitTermination(4 * 3600, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
我打赌你想添加这样的内容:
finally {
if (executor != null) {
executor.shutdown();
}
}
应该发表评论,但声誉不够。
您应该调用executor上的shutdown。您可以从以下链接获得更多详细信息:在ExecutorService上调用shutdown()的原因
我有一个线程池为10的executor服务,我希望得到10条打印输出语句,它们之间的间隔为3秒,但我只收到一条打印输出语句。我传递了10作为参数,所以我希望运行10个线程。如何检索未来的10个对象? 我得到的输出是: 线程执行前 结果:123 ArrayList中的期货:123
我正在查询SQL数据库,但由于某些原因,结果项会随机返回。这是我的密码: searchFriendEmailArrayNew是一个电子邮件地址数组,因此当我查询数据库表时,它会使用电子邮件来查找该用户。数组始终保持一致且顺序相同: user1@email.com 查询总是按照这个顺序进行的。 然后,我查询用户的所选字段,在本例中,我查询的是“isriding”字段。此字段是返回true或false
我通过使用Executor服务创建3个线程(extends Runnable)并提交它们来执行主类中的三个任务。如下所示: 当线程中出现异常时,我捕获它并执行System.exit(-1)。但是,如果发生任何异常,我需要返回到主类,并在那里执行一些语句。这怎么做?我们能在没有FutureTask的情况下从这些线程中返回一些东西吗?
问题内容: 为什么更改总和顺序会返回不同的结果? = = 双方的Java和JavaScript的返回相同的结果。 我知道,由于以二进制表示浮点数的方式,某些有理数( 例如1/3-0.333333 … )无法精确表示。 为什么简单地更改元素的顺序会影响结果? 问题答案: 也许这个问题很愚蠢,但是为什么仅仅改变元素的顺序会影响结果呢? 它将根据值的大小更改四舍五入的点。作为示例 _样的_事情,我们所看
为什么改变求和顺序会返回不同的结果? = Java和JavaScript都返回相同的结果。 我知道,由于浮点数在二进制中的表示方式,一些有理数(如1/3-0.333333...)不能精确表示。 为什么简单地改变元素的顺序会影响结果?
问题内容: 是否可以以预定顺序进行声明,即 选择ID 7,2,5,9和8 并以该顺序返回它们 ,仅基于ID字段? 这两个语句以相同顺序返回它们: 问题答案: 我不认为这是可能的,但是在这里找到了一个博客条目,似乎可以满足您的需求: 将给不同的结果 返回给定第二个参数的位置,因此对于上面的第一种情况,7的位置在集合中的位置1,2的位置在2,依此类推-mysql在内部得出类似 然后按的结果排序。