• Java线程池的四种创建方式


    Java通过Executors提供四种线程池,分别为:
    newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

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

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

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

    详细内容可参见博友的博客Java并发编程:线程池的使用

    1.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);  
                    }  
                });  
            }  
        }

    2.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();  
                        }  
                    }  
                });  
            }  
        }  

    3.newScheduledThreadPoo

    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);  
            }  
      
        }  

    4.newSingleThreadExecutor 按顺序来执行线程任务   但是不同于单线程,这个线程池只是只能存在一个线程,这个线程死后另外一个线程会补上。

    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();  
                        }  
                    }  
                });  
            }  
        }  
  • 相关阅读:
    程序员眼中的 SQL Server-执行计划教会我如何创建索引?
    SQL Server死锁排查
    详解Java中的clone方法 -- 原型模式
    sql-索引的作用(超详细)
    java.util.ConcurrentModificationException 解决办法
    SqlServer索引的原理与应用
    数据库性能优化三:程序操作优化
    数据库性能优化二:数据库表优化
    数据库性能优化一:数据库自身优化(大数据量)
    SQL索引一步到位
  • 原文地址:https://www.cnblogs.com/lanseyitai1224/p/7895652.html
Copyright © 2020-2023  润新知