1515
1616import com .zfoo .monitor .*;
1717import com .zfoo .net .util .NetUtils ;
18- import com .zfoo .protocol .exception .RunException ;
19- import com .zfoo .protocol .util .*;
18+ import com .zfoo .protocol .util .FileUtils ;
19+ import com .zfoo .protocol .util .IOUtils ;
20+ import com .zfoo .protocol .util .StringUtils ;
21+ import com .zfoo .protocol .util .ThreadUtils ;
2022import com .zfoo .scheduler .util .TimeUtils ;
2123import org .slf4j .Logger ;
2224import org .slf4j .LoggerFactory ;
2729
2830import java .io .File ;
2931import java .io .IOException ;
30- import java .io .InputStream ;
3132import java .text .NumberFormat ;
3233import java .util .ArrayList ;
3334import java .util .HashMap ;
3435import java .util .List ;
36+ import java .util .concurrent .ExecutorService ;
37+ import java .util .concurrent .Executors ;
38+ import java .util .concurrent .ThreadFactory ;
3539import java .util .concurrent .TimeUnit ;
40+ import java .util .concurrent .atomic .AtomicInteger ;
3641
3742/**
3843 * Oshi库封装的工具类,通过此工具类,可获取系统、硬件相关信息
@@ -254,6 +259,15 @@ public static SystemInfo os() {
254259 }
255260
256261 // -----------------------------------------------------------------------------------------------------------------
262+ private static final ExecutorService executors = Executors .newCachedThreadPool (new MonitorThreadFactory ());
263+ public static class MonitorThreadFactory implements ThreadFactory {
264+ private final AtomicInteger threadNumber = new AtomicInteger (1 );
265+ @ Override
266+ public Thread newThread (Runnable runnable ) {
267+ var threadName = StringUtils .format ("monitor-t-{}" , threadNumber .getAndIncrement ());
268+ return new Thread ( runnable , threadName );
269+ }
270+ }
257271 public static String execCommand (String command ) {
258272 logger .info ("execCommand [{}]" , command );
259273 try {
@@ -286,23 +300,21 @@ private static String doExecCommand(String command, File wd) throws IOException,
286300 var err = new StringBuilder ();
287301
288302 // 异步读取输出,避免缓冲区阻塞
289- var outThread = new Thread (ThreadUtils .safeRunnable (() -> {
303+ executors . submit (ThreadUtils .safeRunnable (() -> {
290304 try {
291305 out .append (StringUtils .bytesToString (IOUtils .toByteArray (process .getInputStream ())));
292306 } catch (IOException e ) {
293307 throw new RuntimeException (e );
294308 }
295309 }));
296- var errThread = new Thread (() -> {
310+ executors . submit ( ThreadUtils . safeRunnable (() -> {
297311 try {
298312 err .append (StringUtils .bytesToString (IOUtils .toByteArray (process .getErrorStream ())));
299313 } catch (IOException e ) {
300314 throw new RuntimeException (e );
301315 }
302- });
303316
304- outThread .start ();
305- errThread .start ();
317+ }));
306318
307319 var finished = process .waitFor (256 , TimeUnit .SECONDS );
308320 if (!finished ) {
@@ -312,9 +324,6 @@ private static String doExecCommand(String command, File wd) throws IOException,
312324
313325 process .destroy ();
314326
315- outThread .join ();
316- errThread .join ();
317-
318327 // 获取线程的退出值,0代表正常退出,非0代表异常中止
319328 int exitValue = process .exitValue ();
320329 if (exitValue != 0 ) {
0 commit comments