天天看点

java purge_Java ThreadPoolExecutor.purge方法代码示例

import java.util.concurrent.ThreadPoolExecutor; //导入方法依赖的package包/类

public void testPurge() throws InterruptedException {

final CountDownLatch threadStarted = new CountDownLatch(1);

final CountDownLatch done = new CountDownLatch(1);

final BlockingQueue q = new ArrayBlockingQueue<>(10);

final ThreadPoolExecutor p =

new ThreadPoolExecutor(1, 1,

LONG_DELAY_MS, MILLISECONDS,

q);

try (PoolCleaner cleaner = cleaner(p, done)) {

FutureTask[] tasks = new FutureTask[5];

for (int i = 0; i < tasks.length; i++) {

Callable task = new CheckedCallable() {

public Boolean realCall() throws InterruptedException {

threadStarted.countDown();

await(done);

return Boolean.TRUE;

}};

tasks[i] = new FutureTask(task);

p.execute(tasks[i]);

}

await(threadStarted);

assertEquals(tasks.length, p.getTaskCount());

assertEquals(tasks.length - 1, q.size());

assertEquals(1L, p.getActiveCount());

assertEquals(0L, p.getCompletedTaskCount());

tasks[4].cancel(true);

tasks[3].cancel(false);

p.purge();

assertEquals(tasks.length - 3, q.size());

assertEquals(tasks.length - 2, p.getTaskCount());

p.purge(); // Nothing to do

assertEquals(tasks.length - 3, q.size());

assertEquals(tasks.length - 2, p.getTaskCount());

}

}