一次执行一个线程

JDO*_*dle 1 java concurrency multithreading executorservice java.util.concurrent

我在for循环中创建了几个线程,如下所示:

for (int i = 0; i<5; i++) {
   new Thread() {
       //do stuff
   }
}
Run Code Online (Sandbox Code Playgroud)

但我需要确保这些线程一个接一个地执行,而不是同时执行.

做这个的最好方式是什么?

Umb*_*ndi 9

使用ExecutorService池大小为1的顺序执行作业(简洁明了的解决方案).

如果你需要一个简单的例子:

    Executor executor = Executors.newFixedThreadPool(1);
    for(int i=0;i<100;i++){
        final int idx=i;
        executor.execute(new Runnable(){
            public void run(){
               System.out.println("I'm thread #"+idx); 
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

这将按顺序执行100 Runnable,每个将打印其索引.

有关详细信息,请参阅官方文档.