多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
如果一次要处理100个请求,并且每个请求需要一个单独的线程完成。就可以采用多线程的方式,100个请求直接从线程池获取,无需每次都创建一次线程提高速度。
好了,进入正题:如何去创建一个线程池?
需要了解的是java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法
1、
// 创建一个可重用固定线程数的线程池
ExecutorService pool = Executors.newFixedThreadPool(7);
ExecutorService pool = Executors.newFixedThreadPool(7);
pool.execute(……);
// 关闭线程池
pool.shutdown();
// 关闭线程池
pool.shutdown();
newFixedThreadPool的参数指定了可以运行的线程的最大数目,超过这个数目的线程加进去以后,不会运行。其次,加入线程池的线程属于托管状态,线程的运行不受加入顺序的影响。
缺点:
不能随时建新的线程,无法灵活扩展,多出的任务要进行排队
和newFixedThreadPool差不多,如果有任务就建立一个线程放到池中,时间过期自动回收,可以自动扩展
缺点:当任务量非常大的时候,没有及时回收,可能引起内存溢出
3、SingleThreadExecutor 单例线程
和newFixedThreadPool差不多,但是数量只有1,单利线程
缺点,无法充分利用多核
4、延迟连接池,newScheduledThreadPool
这个池子里的线程可以按schedule依次delay执行,或周期执行
ScheduledExecutorService pool = Executors.newScheduledThreadPool(
2
);
// 使用延迟执行风格的方法
pool.schedule(t2,
1000
, TimeUnit.MILLISECONDS);
萝卜青菜各有所好,无论什么模式都有他的优点和利用的地方
写了够多了,这些够用了,深入的大家自己研究吧