30.JAVA编程之线程池

线程池是预先创建线程的一种技术,线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,如何对这些资源进行复用,减少频繁的创建和销毁对象。
Java里面线程池的顶级接口是Executor,是一个执行线程的工具
线程池接口是ExecutorService
创建线程池有4种方法:

方法一:创建一个单线程的线程池

这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务,如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它,次线程池保证所有任务的执行顺序按照任务的提交顺序执行
ExecutorService es = Executors.newSingleThreadExecutor();
示例代码:

public class ThreadDemo2 {
    public static void main(String[] args) {
        //创建线程池,4种方法
        //方法一:创建一个单线程的线程池
        ExecutorService es = Executors.newSingleThreadExecutor();

        es.execute(new MyRunnable6());
        es.execute(new MyRunnable6());
        es.shutdown();
    }
}

class MyRunnable6 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("run0-----"+i);
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

方法二:创建一个固定大小的线程池

每次提交一个任务就创建一个线程,知道线程达到线程池的最大大小,线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,name线程会补充一个新线程

ExecutorService es = Executors.newFixedThreadPool(2);

方法四:创建一个可缓存的线程池

用的不多,除非一些比较大的项目
如果线程池的大小超过了处理任务所需要的线程,那么就会回售部分空闲(60s不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作现场(或者JVM)能够创建的最大线程大小

ExecutorService es = Executors.newCachedThreadPool();

方法四:创建一个大小无限线程池

此线程池支持定时以及周期性执行任务的需求
定时的操作:

 ScheduledExecutorService es = Executors.newScheduledThreadPool(3);
        es.schedule(new MyRunnable6(),3000, TimeUnit.MILLISECONDS);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容