Различие методов getActiveCount() и getTaskCount() ThreadPoolExecutor

161
22 февраля 2018, 13:57

В чём заключается различие методов getActiveCount() и getTaskCount() класса ThreadPoolExecutor? Правильно, я понимаю, что getActiveCount() - это приблизительное количество потоков, которые выполняют задания, а getTaskCount() - приблизительное общее количество задач, которые когда-либо были запланированы для выполнения. Т.е., правильно ли я понимаю, что значение, возвращаемое вторым методом, включает и выполняющиеся в данный момент задания, и уже выполненные и завершённые задания?

Answer 1

А что мешает проверить?

    import java.util.Random;
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    import java.util.logging.Logger;
    public class ThreadPoolExecutorTest {
        private static final Logger LOG = Logger.getLogger(ThreadPoolExecutorTest.class.getName());
        public static void main(String[] args) {
            BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue(100);

            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                10, 20, 1000, TimeUnit.SECONDS, blockingQueue
            );
            for (int i = 0; i < 100; i++) {
                threadPoolExecutor.execute(new TestRunnable());
                System.out.println("ActiveCount:" + threadPoolExecutor.getActiveCount());
                System.out.println("TaskCount: " + threadPoolExecutor.getTaskCount());
            }
        }
    }
    class TestRunnable implements Runnable {
        @Override
        public void run() {
            try {
                Thread.sleep(new Random().nextInt(10000) + 2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

По выводу видно:
ActiveCount:1 TaskCount: 1 ActiveCount:2 TaskCount: 2 ActiveCount:3 TaskCount: 3 ActiveCount:4 TaskCount: 4 ActiveCount:5 TaskCount: 5 ActiveCount:6 TaskCount: 6 ActiveCount:7 TaskCount: 7 ActiveCount:8 TaskCount: 8 ActiveCount:9 TaskCount: 9 ActiveCount:10 TaskCount: 10 ActiveCount:10 TaskCount: 11 ActiveCount:10 TaskCount: 12 ActiveCount:10 TaskCount: 13 ActiveCount:10 TaskCount: 14 ActiveCount:10 TaskCount: 15 ActiveCount:10 TaskCount: 16 ActiveCount:10 TaskCount: 17 ActiveCount:10 TaskCount: 18 ActiveCount:10 TaskCount: 19 ActiveCount:10 TaskCount: 20 ActiveCount:10 TaskCount: 21 ActiveCount:10 TaskCount: 22 ActiveCount:10 TaskCount: 23 ActiveCount:10 TaskCount: 24 ActiveCount:10 TaskCount: 25 ActiveCount:10 TaskCount: 26 ActiveCount:10 TaskCount: 27 ActiveCount:10 TaskCount: 28 ActiveCount:10 TaskCount: 29 ActiveCount:10 TaskCount: 30 ActiveCount:10 TaskCount: 31 ActiveCount:10 TaskCount: 32 ActiveCount:10 TaskCount: 33 ActiveCount:10 TaskCount: 34 ActiveCount:10 TaskCount: 35 ActiveCount:10 TaskCount: 36 ActiveCount:10 TaskCount: 37 ActiveCount:10 TaskCount: 38 ActiveCount:10 TaskCount: 39 ActiveCount:10 TaskCount: 40 ActiveCount:10 TaskCount: 41 ActiveCount:10 TaskCount: 42 ActiveCount:10 TaskCount: 43 ActiveCount:10 TaskCount: 44 ActiveCount:10 TaskCount: 45 ActiveCount:10 TaskCount: 46 ActiveCount:10 TaskCount: 47 ActiveCount:10 TaskCount: 48 ActiveCount:10 TaskCount: 49 ActiveCount:10 TaskCount: 50 ActiveCount:10 TaskCount: 51 ActiveCount:10 TaskCount: 52 ActiveCount:10 TaskCount: 53 ActiveCount:10 TaskCount: 54 ActiveCount:10 TaskCount: 55 ActiveCount:10 TaskCount: 56 ActiveCount:10 TaskCount: 57 ActiveCount:10 TaskCount: 58 ActiveCount:10 TaskCount: 59 ActiveCount:10 TaskCount: 60 ActiveCount:10 TaskCount: 61 ActiveCount:10 TaskCount: 62 ActiveCount:10 TaskCount: 63 ActiveCount:10 TaskCount: 64 ActiveCount:10 TaskCount: 65 ActiveCount:10 TaskCount: 66 ActiveCount:10 TaskCount: 67 ActiveCount:10 TaskCount: 68 ActiveCount:10 TaskCount: 69 ActiveCount:10 TaskCount: 70 ActiveCount:10 TaskCount: 71 ActiveCount:10 TaskCount: 72 ActiveCount:10 TaskCount: 73 ActiveCount:10 TaskCount: 74 ActiveCount:10 TaskCount: 75 ActiveCount:10 TaskCount: 76 ActiveCount:10 TaskCount: 77 ActiveCount:10 TaskCount: 78 ActiveCount:10 TaskCount: 79 ActiveCount:10 TaskCount: 80 ActiveCount:10 TaskCount: 81 ActiveCount:10 TaskCount: 82 ActiveCount:10 TaskCount: 83 ActiveCount:10 TaskCount: 84 ActiveCount:10 TaskCount: 85 ActiveCount:10 TaskCount: 86 ActiveCount:10 TaskCount: 87 ActiveCount:10 TaskCount: 88 ActiveCount:10 TaskCount: 89 ActiveCount:10 TaskCount: 90 ActiveCount:10 TaskCount: 91 ActiveCount:10 TaskCount: 92 ActiveCount:10 TaskCount: 93 ActiveCount:10 TaskCount: 94 ActiveCount:10 TaskCount: 95 ActiveCount:10 TaskCount: 96 ActiveCount:10 TaskCount: 97 ActiveCount:10 TaskCount: 98 ActiveCount:10 TaskCount: 99 ActiveCount:10 TaskCount: 100

что getActiveCount - это количество запущенное сейчас, а getTaskCount - запущенные когда либо.

READ ALSO
Оптимальная сборка строки

Оптимальная сборка строки

Как эффективней/целесообразней в Java собирать строку из частей? Через Stringformat()

141
Android Studio, Error:A problem occurred configuring project &#39;:app&#39;. &gt; Failed to find Build Tools revision 26.0.2

Android Studio, Error:A problem occurred configuring project ':app'. > Failed to find Build Tools revision 26.0.2

Скачал Android Studio, пытаюсь сбилдить пример по умолчанию, получаю ошибку:

204
Ejb совместно c Spring

Ejb совместно c Spring

Как в spinge использовать EJB классы

144
Очередь в ThreadPoolExecutor

Очередь в ThreadPoolExecutor

Насколько я понимаю, принципы создания новых потоков в ThreadPoolExecutor следующие:

157