Java多线程(五)——多线程的多线程池

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xcymorningsun/article/details/87936308

目录

一、引言

二、多线程池种类

三、多线程池实现

四、总结


一、引言

我们可以创建多线程了为什么要用多线程池?

服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多;如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足;

线程池主要用来解决线程生命周期开销问题和资源不足问题,简单来讲就是管理线程的池子,类似数据库连接池,如果自己写的话通过监听线程的生命周期也可以写出来。

二、多线程池种类

  • newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
  • newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
  • newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
  • newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

三、多线程池实现

举个简单的例子创建定长的多线程池newFixedThreadPool

public class TestThreadpool {
    public static  void main(String [] args)
    {
        ExecutorService fixPool = Executors.newFixedThreadPool(5);
        for(int i=0;i<10;i++)
        {
            fixPool.execute(new Thread(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"输出");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }));

        }

    }
}

输出结果:每次最多只能执行五个线程,多的话就只能排队等待

pool-1-thread-1输出
pool-1-thread-2输出
pool-1-thread-3输出
pool-1-thread-4输出
pool-1-thread-5输出
pool-1-thread-3输出
pool-1-thread-5输出
pool-1-thread-4输出
pool-1-thread-2输出
pool-1-thread-1输出

四、总结

  • 多线程池种类;
  • 多线程池实现;

猜你喜欢

转载自blog.csdn.net/xcymorningsun/article/details/87936308