繁体   English   中英

为什么FixedThreadPool无法正常工作

[英]Why FixedThreadPool not working properly

这是我的以下代码:

    ExecutorService executor = Executors.newFixedThreadPool(5);

    executor.submit(new Runnable() {
        public void run() {
            for (int i = 0; i < 5; i++) {
              System.out.println("Start"+"  "+Thread.currentThread().getName());
              try {
                Thread.sleep(100);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
              System.out.println("End!"+"  "+Thread.currentThread().getName());
            }
        }
    });

    executor.shutdown();
    executor.awaitTermination(1, TimeUnit.SECONDS);

这是我的输出:

    Start  pool-1-thread-1
    End!  pool-1-thread-1
    Start  pool-1-thread-1
    End!  pool-1-thread-1
    Start  pool-1-thread-1
    End!  pool-1-thread-1
    Start  pool-1-thread-1
    End!  pool-1-thread-1
    Start  pool-1-thread-1
    End!  pool-1-thread-1

我的理解是,在我的代码中, FixedThreadPool5线程。 因此,当我运行代码时,应该输出所有5线程,对吗? 还是我误会了什么?

在我的输出thread-1每次都开始和结束,但是当它循环for循环时,它不是应该输出所有5线程吗? 原因是如果只有1个thread在执行task那为什么还要5个threads呢? 所有5线程都可以在控制台上输出任何方式吗?(我是新手)

您只发布了一个Runnable因此您的ExecutorService运行了一项任务。 它只会使用一个线程。 要使用多个线程,您必须多次调用submit ,或者可以使用可运行对象的Collection调用invokeAll

编辑

像这样:

public void test() {
    int numberOfThreads = 5;
    ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
    for(int i=0; i<numberOfThreads; i++){
        executorService.submit(createRunnable());
    }
}

private Runnable createRunnable() {
    return new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 5; i++) {
                System.out.println("Start" + "  " + Thread.currentThread().getName());
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("End!" + "  " + Thread.currentThread().getName());
            }
        }
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM