A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

创建一3个线程的线程池,为其分配5个任务,预期结果应该是:三个线程先为0、1、2号任务服务,完成后再有两个线程为其余两个任务服务。可是运行结果确不是这样,程序如下:
package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ExecutorService executorService = Executors.newFixedThreadPool(3);
                for (int i = 0; i < 5; i++) {
                        final int task = i;
                        executorService.execute(new Runnable() {

                                @Override
                                public void run() {
                                        for (int j = 0; j < 5; j++) {
                                                /*try {
                                                        Thread.sleep(20);
                                                } catch (InterruptedException e) {
                                                        // TODO Auto-generated catch block
                                                        e.printStackTrace();
                                                }*/
                                                System.out.println(Thread.currentThread().getName()
                                                                + " is running loop of " + j + " of task "
                                                                + task);
                                        }
                                }
                        });
                }
                System.out.println("5 task has put in!");
                executorService.shutdown();
        }
}
后来加上被注释的那几行,在运行结果才跟预期的一样!现在我不明白为什么要休眠20毫秒,请高手给解释一下!谢谢!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马