Java并发编程高级篇(二):使用固定大小线程执行器

使用Executors工厂类的newCachedThreadPool方法来创建的线程执行器,当执行器碰到没有可用线程的时候,执行器就会创建新的线程。这样,当大量的任务加入到线程执行器,就会造成系统超负荷运行。

为了解决这个问题,我们这次试用一个固定大小的线程执行器。这个执行器有一个线程数的最大值。如果新任务进来后已经没有可用线程,那么新的任务都将会被阻塞,直到有任务执行完毕,这时执行器才有可用线程来执行被组赛的任务。

要想创建固定大小线程执行器,你需要使用执行器工厂的Executors.newFixedThreadPool(n)来创建,参数n为最大线程数。

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * Created by hadoop on 15/12/9.
 */
public class Server {
    ThreadPoolExecutor executor;

    public Server() {
        executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
    }

    public void execute(Task task) {
        System.out.println("Server: A new task has arrived.\n");
        executor.execute(task);
        System.out.printf("Server: Pool Size: %d\n", executor.getPoolSize());
        System.out.printf("Server: Active Count: %d\n", executor.getActiveCount());
        System.out.printf("Server: Completed Task: %d\n", executor.getCompletedTaskCount());
        System.out.printf("Server: Task Count: %d\n", executor.getTaskCount());
    }

    public void endServer() {
        executor.shutdown();
    }
}

其他代码(Main和Task类),参考Java并发编程高级篇(一)。

你可能感兴趣的:(Java并发编程高级篇(二):使用固定大小线程执行器)