要求:1000次循环在六秒左右,目前是九秒多,不到十秒。cmd执行命令的参数path是动态的,是批量执行脚本的命令,这里只是个demo。不同设备保证不会有乱码。回复里最好有现在慢的主要原因,解决思路及优化后的代码
static ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
@GetMapping("/run")
public void run() {
String path = "ipconfig";
executorService.execute(() -> {
try {
Process process;
process = new ProcessBuilder("cmd.exe", "/c", path).start();
readStream(process.getErrorStream());
readStream(process.getInputStream());
//System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()));
} catch (IOException e) {
System.out.println("运行错误:" + e.getMessage());
e.printStackTrace();
}
});
}
public void readStream(InputStream is) {
String line;
BufferedReader input;
try {
input = new BufferedReader(new InputStreamReader(is, "gbk"));
StringBuilder CmdReturn = new StringBuilder();
line = input.readLine();
while (line != null) {
line = input.readLine();
CmdReturn.append(line);
}
//System.out.println(CmdReturn);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}