我使用一个Runnable对象来运行processCommand并执行一些需要一定时间的处理(我们称之为insideprocess)。在insideprocess的末尾,它将向文本文件写入一些内容。其思想是,如果在指定的时间内insideprocess仍未完成,则必须将其杀死,因此我使用ExecutorService来处理它。但是如果insideprocess早于指定时间完成,它将中断ExecutorService以便主线程可以继续执行下一个任务。
但问题是,有时insideprocess根本没有创建文件,或者它创建了一个文件,但文件中没有写入任何内容。当insideprocess早于指定时间完成时,就会发生这种情况。我不知道我的实现出了什么问题。请注意,如果我手动执行流程(不使用ExecutorService),流程运行良好,并且它正确地编写了所有内容。
在这里,我发布了我的html" target="_blank">代码来完成这项工作:
public void process(){
for (int i = 0; i < stoppingTime.length; i++) {
for (int j = 2 * i; j < 2 * (i + 1); j++) {
final int temp = j;
ExecutorService executor = Executors.newSingleThreadExecutor();
Runnable r = new Runnable() {
@Override
public void run() {
Process p = null;
int ex = 1;
try {
p = Runtime.getRuntime().exec(
processCommand.get(temp));
while (ex != 0) {
try {
//sleep every 30 second then check the exitValue
Thread.sleep(30000);
} catch (InterruptedException e) {
}
ex = p.exitValue();
p.destroy();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("IOException");
}
}
};
Future future = executor.submit(r);
try {
System.out.println("Started..");
future.get(stoppingTime[i], TimeUnit.SECONDS);
System.out.println("Finished!");
} catch (TimeoutException e) {
System.out.println("Terminated!");
} catch (InterruptedException e) {
System.out.println("Future gets InterruptedException");
} catch (ExecutionException e) {
System.out.println("Future gets ExecutionException");
}
executor.shutdownNow();
System.out.println("shutdown executor");
}
System.out.println();
}
}
老问题,我想我还是要试试。
首先,您将在双循环中获得一个executorservice
,它与定义的runnable
位于同一块中。如果您希望获得本机执行“processCommand”
的返回值,然后继续执行下一个任务,那么您需要在循环之前实例化ExecutorService
来重用该ExecutorService。
其次,
stoppingtime[i]
是int
,而future.get(...)
需要long
。
主要内容:1. 主进程和工作进程,2. 控制NGINX本节介绍NGINX在运行时启动的过程以及如何控制它们。 在这个部分中,主要涉及两个部分的内容: 主进程和工作进程 控制NGINX 1. 主进程和工作进程 NGINX有一个主进程和一个或多个工作进程。 如果启用缓存,缓存加载程序和缓存管理器进程也将在启动时运行。 主程序的主要目的是读取和评估配置文件以及维护工作进程。 工作进程执行请求的实际处理。 NGINX依赖于操作系统的机制来有效地在工作进程之间
针对 Subversion 1.4(根据r2866编译) 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书的结构 本书是免费的 致谢 来自 Ben Collins-Sussman 来自 Brian W. Fitzpatrick 来自 C. Michael Pilato Subversion是什么? Subversion的历史 Subversion的特性 Subversion的架构 S
我还有一个关于Python多处理的问题。我有一个模块,它创建了一个进程,并在while-True循环中运行。此模块将从另一个Python模块启用/禁用。另一个模块将导入第一个模块一次,并作为进程运行。 我该如何更好地实现这一点? 因此,作为参考: 想象第二个模块是这样的: 不断地运行一个流程来检查循环中的条件似乎是一种浪费,但我很乐意接受这样的解决方案,它只允许我从外部设置值。理想情况下,我希望能
我已经用RxJava成功地完成了一个小型Java程序。代码为: 使用此代码,一切正常。现在我正在尝试将此代码传递给Android: 在finished()方法中,我正在更新GUI(finishedListener是当前活动正在实现的接口)。 我在使用map(I)的线路上遇到错误- 内置。gradle(用于应用程序)我正在使用: 我如何解决这个问题?
运行控制用来对实验状态与实验流量进行调整与控制。本节将会对运行控制的使用流程进行详细介绍。主要内容包括实验定向的使用与使用流量的调节。 已经关闭的实验不允许重新启用,此时如果你想再次尝试一下,你可以选择重新创建一个实验,并且沿用原来变量与变量值,实验内容依然生效。已经结束的实验请及时关闭 1.1. 实验流量分配 Figure: 运行控制 控制实验状态,包括实验的开启与关闭。为了保证实验的科学性,已
之前我们学习了利用 pin 设备控制 led 的亮灭,这一节我们学习利用 pin 设备进行按键的控制。 基础知识 按键控制的实现有很多的方式,在裸机编程的时候最常用的就是延时消抖以及抬手检测了,可以很简单的就实现按键的输入。其实还有更加简单、灵活的按键处理方式,就是每隔一定的时间间隔扫描一次按键的状态,如果连续多次按键的状态都是按下的状态,我们就认为按键是按下的。 在裸机编程的时候,按键处理一般是