线程池的入门

一、为什么选择线程池

  生产上的Web服务器、数据库服务器、文件服务器的使用场景,大多数都是处理来自一些远程的大量短小的任务。
不管请求如何到达服务器,服务器都是在处理这些单个处理时间很短,但是待处理的量很大的数据。这样做是很浪费
服务器资源的,因为每当一个请求到达服务器,服务器就会创建一个新的线程,在新线程中处理请求。但是由于请求
的处理时间很短、量确很大,服务器要为每次“短”的请求来进行线程的创建和销毁,这个时间就会远远的大于处理请求
的时间,这对服务器的处理效率和资源都是一种极大的浪费。
  而线程池则能很好的解决这个问题,它可以很好的解决在创建和销毁线程上所花的时间以及系统资源的开销和线程
之间的“过度切换问题”。

二、线程池的简单使用

  Java里面线程池的根接口是Executors,它本身并不能算是一个线程池,只是一个执行者。而它的子接口ExecutorService
才是真正的线程池接口。Java通过Executors提供了四种线程池:
  * newCachedThreadPool
    创建一个可创建新线程的线程池,在以前构造的线程可用时将重用它们,增加那些执行短期异步任务的程序性能;
如果现有线程没有可用的,则创建一个新线程并添加到池中;如果缓存中的已有线程60秒钟没有被使用,则从缓存中终止
并移除他们,以保证长时间处于空闲状态的线程池不会使用任何资源。
    可以使用newCachedThreadPool(ThreadFactory threadFactory)有参构造,在需要创建新线程时,使用提供的
ThreadFactory创建。

  源码:

public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, 
        new SynchronousQueue<Runnable>());
    }

  栗子:

自定义线程类:

public class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("线程"+Thread.currentThread().getName()+"执行中");
    }

}

猜你喜欢

转载自www.cnblogs.com/0813lichenyu/p/9147352.html