Vip*_*pul 2 java multithreading executorservice
我正在尝试同时运行 2 个线程以实现多线程,并且我的程序正在运行,但我怀疑为什么我的程序打印到标准输出两次。
这是我的代码库:
public class SimpleExec {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(5);
CountDownLatch countDownLatch6 = new CountDownLatch(5);
ExecutorService executorService = Executors.newFixedThreadPool(1);
System.out.println("start" + LocalDateTime.now());
executorService.execute(new MyThread("first ", countDownLatch));
executorService.execute(new MyThread("Second", countDownLatch6));
try {
countDownLatch.await();
countDownLatch6.await();
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println("end" + LocalDateTime.now());
executorService.shutdown();
}
}
class MyThread implements Runnable {
String name;
CountDownLatch cdl;
public MyThread(String name, CountDownLatch cdl) {
this.cdl = cdl;
this.name = name;
new Thread(this).start();
}
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name + " " + i);
cdl.countDown();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是程序输出的示例:
start 2018-08-18T08:41:51.867
first 0 // first time thread labeled 'first' prints 0 through 4
first 1
first 2
first 3
first 4
Second 0
Second 1
Second 2
first 0 // second time thread labeled 'first' prints 0 through 4 - why does it print again here?
first 1
Second 3
first 2
Second 4
first 3
first 4
end2018-08-18T08:41:51.870
Second 0
Second 1
Second 2
Second 3
Second 4
Run Code Online (Sandbox Code Playgroud)
因为您为构造函数中的每个 Runnables 启动了第二个线程 new Thread(this).start();
Runnables 是用 ExecutorService 启动的,不需要额外的Thread.start()删除它。