用优雅的姿势使用和使用线程池

1.使用线程池的目的:(1)减少系统维护线程的开销 (2)解耦合,运行和创建分开 (3)线程可以复用。

在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给某个线程,线程池在拿到任务后,就在内部寻找是否有空闲的线程,如果有,则将任务交给某个空闲的线程。以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。

同时我们需要知道一下两个内容:

 01.ExecutorService是Java提供的用于管理线程池的类。该类的两个作用:控制线程数量和重用线程

 02.Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务

线程池的创建和使用:

public class NewCachedThreadPoolTest {

    public static void main(String[] args) {
        // 创建一个可缓存线程池
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            try {
                // sleep可明显看到使用的是线程池里面以前的线程,没有创建新的线程
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            cachedThreadPool.execute(new Runnable() {
                public void run() {
                    // 打印正在执行的缓存线程信息
                    System.out.println(Thread.currentThread().getName()
                            + "正在被执行");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

}

 

posted @ 2020-05-05 22:35  Catbir  阅读(256)  评论(0编辑  收藏  举报