完成Java线程

我看到这个问题被问了很多次。很抱歉再次问这个问题。我有个奇怪的问题。

我有一个通过ExecutorService作为单独的可运行任务提交数千个作业的职务。这是在一个简单的for循环中完成的。在for循环的末尾,我调用service.候机(),然后是一个等待高潮。

由于要提交的线程数量很大,所以线程一直挂起,直到所有任务都提交为止。

有任何方法,这些线程可以优雅地终止,一旦它的执行完成?

您可以创建一个新的ThreadPoolExecuto不打电话java.util.concurrent.Executors :

int corePoolSize = 0;
    int maximumPoolSize = 64;
    int keepAliveTime = 5000;
    ExecutorService executorService =
            new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
                    TimeUnit.MILLISECONDS, new SynchronousQueue());

在javadoc中:“如果池当前有多个corePoolSize线程,那么如果多余的线程已经空闲超过了持有AliveTime,那么多余的线程将被终止”

编辑:
下面是一个很小的例子,如果您在Eclipse调试环境中运行这个示例,您应该可以看到线程的来来去去:

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ExecutorTest {

    public static void main(String[] args) {

        ExecutorService executorService = new ThreadPoolExecutor(0, 64, 1000,
                        TimeUnit.MILLISECONDS, new SynchronousQueue());

        for (int i = 0; i <= 500; i ++) {

            try {
                Thread.sleep(new Random().nextInt(200));
            } catch (InterruptedException e) {
            }

            executorService.submit(new TestTask());
        }
    }

    public static class TestTask implements Runnable {
        public void run() {
            try {
                Thread.sleep(new Random().nextInt(1500));
            } catch (InterruptedException e) {
            }
        }
    }
}

你可能感兴趣的:(完成Java线程)