美文网首页
java多线程-线程池

java多线程-线程池

作者: YiiY34 | 来源:发表于2022-04-21 14:49 被阅读0次

创建线程需要操作系统资源(线程资源,栈空间等),频繁创建和销毁大量线程需要消耗大量时间。
那么我们就可以把很多小任务让一组线程来执行,而不是一个任务对应一个新线程。这种能接收大量小任务并进行分发处理的就是线程池。

newCachedThreadPool
ExecutorService executorService = Executors.newCachedThreadPool();
        for (int i = 0; i <= 3; i++) {
            int finalI = i;
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "---我在飞==="+finalI);
                    if (finalI ==2){
                        try {
                            Thread.sleep(200);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }                }
            });
            Thread.sleep(100);
        }
        executorService.shutdown();

输出

pool-1-thread-1---我在飞===0
pool-1-thread-1---我在飞===1
pool-1-thread-1---我在飞===2
pool-1-thread-2---我在飞===3

可见在线程池中如果池内存在空闲线程,就会直接复用,如果没有就创建新的

newFixedThreadPool
ExecutorService executorService = Executors.newFixedThreadPool(2);
        for (int i = 0; i <= 3; i++) {
            int finalI = i;
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "---我在飞===" + finalI);
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();

                    }
                }
            });
        }
        executorService.shutdown();
pool-1-thread-1---我在飞===0
pool-1-thread-2---我在飞===1
此间隔10S
pool-1-thread-1---我在飞===3
pool-1-thread-2---我在飞===2

如果newFixedThreadPool池内无空闲线程他会等,不创建新线程

newSingleThreadExecutor

同newFixedThreadPool(1)

ThreadPoolExecutor

查看newSingleThreadExecutor源码

public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

创建线程池其实就是创建ThreadPoolExecutor对象

/**
     *
     * @param corePoolSize 核心线程数量
     * @param maximumPoolSize 最大线程数
     * @param keepAliveTime 空闲线程最大存活时间
     * @param unit 时间单位
     * @param workQueue 任务队列
     * @param threadFactory 创建线程的工厂
     * @param handler 任务的拒绝策略 超过最大线程数+任务队列最大长度
     */
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

ThreadPoolExecutor.AbortPolicy 丢弃任务并抛出RejectedExecutionException异常(默认)
ThreadPoolExecutor.DiscardPolicy 丢弃任务 不抛出异常
ThreadPoolExecutor.DiscardOldestPolicy 抛弃队列中等待最久的任务 然后把当前任务加入到队列中
ThreadPoolExecutor.CallerRunsPolicy 调用任务的run()方法绕过线程池直接执行

相关文章

  • Java:线程池Executors.newFixedThread

    摘要:Java,多线程,线程池 多线程编程和线程池概述 (1)多线程程序: 计算机可以实现多任务 ( multit...

  • 10.3多线程详解

    Java高级-多线程 多线程创建 多线程通讯 线程池 1.多线程创建 thread/runnable图:继承Thr...

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • Java源码-线程池

    一、线程池实现原理 Java支持多线程,多线程可以提高任务的执行效率。但是Java里面的线程跟操作系统的线程是一一...

  • Java面试题——多线程

    Java面试题——多线程 1,什么是线程池? 线程池是多线程的一种处理方式,处理过程中将任务提交给线程池,任务执行...

  • 阿里巴巴Java高级岗必问面试题总结:JVM+多线程+网络+Re

    阿里巴巴Java高级岗必问面试题总结 一、Java多线程相关 线程池的原理,为什么要创建线程池?创建线程池的方式;...

  • 线程的并发工具类

    Java 下多线程的开发我们可以自己启用多线程,线程池,除此之外,Java还为我们提供了Fork-Join、Cou...

  • [第三期:JAVA并发:线程池管理 ThreadPoolExec

    源码不会骗你的!!! 一、背景 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对...

  • 线程池任务执行过程

    前言 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管...

  • 线程池底层原理

    概述 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管...

网友评论

      本文标题:java多线程-线程池

      本文链接:https://www.haomeiwen.com/subject/umuvertx.html