程序视界

java线程池(简单实现)

2017-05-10  本文已影响86人  沐攸攸

什么是线程池:

java中的线程池是运用场景最多的并发框架,合理的使用线程池能够带来的3个好处:

为了更好的控制多线程,JDK提供了一套Executor框架,帮助开发人员进行线程控制,其本质就是一个线程池。

如图:


这里写图片描述

Executor框架提供了各种类型的线程池,以下有四种常用的工厂方法

  1. newFixedThreadPool()方法:该方法返回一个固定线程数量的线程池。它适用于负载比较重的服务器。
  2. newSingleThreadExecutor()方法:该方法返回一个只有一个线程的线程池。适用于需要保证顺序地执行各个任务,并且在任意时间点,不会有多个线程是活动的应用场景。
  3. newCachedThreadPool()方法:该方法返回一个可根据实际情况调整线程数量的线程池。适用于执行很多的短期异步任务的小程序,或是负载较轻的服务器。
  4. newSingleThreadScheduledExecutor()方法:该方法返回一个ScheduledExecutorService对象,线程池大小为1.适用于需要单个后台线程执行周期任务,同时保证顺序地执行各个任务的应用场景。

线程池的使用:

以下通过一段代码来展示线程池的应用:


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolTest {
    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        for(int i=1;i<=10;i++) {
            final int task = i;
            threadPool.execute(new Runnable() {
                
                @Override
                public void run() {
                    for(int j=1;j<=10;j++) {
                        try {
                            Thread.sleep(20);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()+"loop of" +j +"for task of"+ task);
                    }
                }
            });
        }
        System.out.println("game over");
        threadPool.shutdown();
    }
}

以上就是一个简单的小实例,非常适合新手学习线程池,其实线程池的实例还有好多,想多了解的可以在网上找到一大堆的资料以及源码,这里菲菲同学就不举例了,(因为我有好多点都不太懂呢,学习完全处于懵懂状态)我知道现在我写的东西特别的肤浅,如果大神们看到觉得特别幼稚的话,千万不要打击我哦。我会一步一步改进这些东西的。

上一篇下一篇

猜你喜欢

热点阅读