2 qq 30809319 qq_30809319 于 2018.02.11 22:36 提问

newFixedThreadPool例子无法运行求解 5C
@Test
public void test1() {
    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
    for (int i = 0; i < 10; i++) {
        final int index = i;
        fixedThreadPool.execute(new Runnable() {

            @Override
            public void run() {
                try {
                    System.out.println(index);
                    Thread.sleep(2000);
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }
        });
    }
}

以上是我在别的博客找到的例子,但是这个例子无法实现“每2秒打印3个数字”这个效果。前三个线程被执行,但是后面加入的都不行。for并没有被阻塞。

13个回答

qq_30809319
qq_30809319   2018.02.11 23:01

我在for里面打印了一下线程池的状态
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 0, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 1, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 2, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 3, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 4, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 5, completed tasks = 0]
java.util.concurrent.ThreadPoolExecutor@5b37e0d2[Running, pool size = 3, active threads = 3, queued tasks = 6, completed tasks = 0]

ccj2me2010
ccj2me2010   2018.02.11 22:48

什么JDK版本?看代码应该是可以的。

XiaoYeSha
XiaoYeSha 回复Lavichord: 因为你主线程已经退出了,你在后面加上Thread.sleep(100000l);试下
12 天之前 回复
qq_30809319
qq_30809319 1.8.0_151,您的机器跑起来没问题吗?
12 天之前 回复
fbbobo
fbbobo   2018.02.12 00:30

在两秒钟所有的这个for循环都执行完了 三个以后的线程只能在队列中排队了 你打印时间长点会继续的

fbbobo
fbbobo   2018.02.12 00:28

在两秒钟所有的这个for循环都执行完了 三个以后的线程只能在队列中排队了 你打印时间长点会继续的图片说明

mabawo1234
mabawo1234   2018.02.12 08:21

在两秒钟所有的这个for循环都执行完了 三个以后的线程只能在队列中排队了 你打印时间长点会继续

mabawo1234
mabawo1234   2018.02.12 08:22

什么JDK版本?看代码应该是可以的

wugemao
wugemao   2018.02.12 09:49

completed tasks = 0说明你的Runnable没有一个是执行完成的,检查一下你是不是开debug在public void run()里面打了断点导致所以线程block在run方法里面。

zhaoyu_android4311
zhaoyu_android4311   2018.02.12 10:01

fix的线程池,线程数固定,可能达到后,后边的任务就被丢弃了

wang2549145
wang2549145   2018.02.12 14:30

在两秒钟所有的这个for循环都执行完了 三个以后的线程只能在队列中排队了 你打印时间长点会继续的,不用谢

fbbobo
fbbobo   2018.02.12 16:05

在两秒钟所有的这个for循环都执行完了 三个以后的线程只能在队列中排队了 你打印时间长点会继续的--同意

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!