创建线程池该如何创建?有几种方式?

TheDisguiser 2020-05-25 20:46:02 java常见问答 8422

线程池相信大家都有一定的了解了吧,那你们知道线程池该如何创建吗?又有几种创建方式呢?下面一起跟小编来看看吧。

首先我们得知道,在Java语言中,java会通过Executors来提供四种线程池创建方式,分别是:

一、newCachedThreadPool

创建了一个可缓存线程池,假如,线程池长度超过处理需要,它就可以够灵活回收空闲线程,假如无可回收,那么就新建线程。

public static void main(String[] args)
{
    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    for (int i = 0; i < 10; i++)
    {
        final int index = i;
        try
        {
            Thread.sleep(10);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        cachedThreadPool.execute(new Runnable()
        {
            public void run()
            {
                System.out.println(index);
            }
        });
    }
}

二、newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

public static void main(String[] args)
{
    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
    for (int i = 0; i < 10; i++)
    {
        final int index = i;
        fixedThreadPool.execute(new Runnable()
        {
            public void run()
            {
                try
                {
                    System.out.println(index);
                    Thread.sleep(10);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        });
    }
}

三、newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。

public static void main(String[] args)
{
    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    for (int i = 0; i < 10; i++)
    {
        scheduledThreadPool.schedule(new Runnable()
        {
            public void run()
            {
                System.out.println("delay 3 seconds");
            }
        }, 3, TimeUnit.SECONDS);
    }
}

四、newSingleThreadExecutor

创建一个单线程化的线程池,这个线程池只会用唯一的工作线程来执行任务,来保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

public static void main(String[] args)
{
    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    for (int i = 0; i < 10; i++)
    {
        final int index = i;
        singleThreadExecutor.execute(new Runnable()
        {
            public void run()
            {
                /*                  System.out.println(index);*/
                try
                {
                    System.out.println(index);
                    Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        });
    }
}

以上就是关于线程池实现方式的所有内容了,线程池是java中基础之一,但也是非常重要的,如果还想要了解更多与之相关的java常见问答知识,请一直关注我们网站吧。

推荐阅读:

线程池原理都有哪些?线程池是什么?

线程池有几种?线程池的种类案列

线程池拒绝策略是什么?线程池拒绝策略详解