返回顶部
首页 > 资讯 > 后端开发 > Python >Java详解使用线程池处理任务方法
  • 567
分享到

Java详解使用线程池处理任务方法

2024-04-02 19:04:59 567人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

什么是线程池? 线程池就是一个可以复用线程的技术。 不使用线程池的问题: 如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的

什么是线程池

线程池就是一个可以复用线程的技术。

不使用线程池的问题:

如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。

线程池常见面试题

1、临时线程什么时候创建?

新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。

2、什么时候会开始拒绝任务?

核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。

1、线程池处理Runnable任务

import java.util.concurrent.*;
public class 多线程_5线程池处理Runnable任务 {
    public static void main(String[] args) {
        //线程池处理Runnable任务
        //创建线程池对象
        
        ExecutorService pool=new ThreadPoolExecutor(3,5,
                6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        //给任务线程池处理
        Runnable r=new MyExe();
        //三个核心线程
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        //五个任务队列(不创建临时线程时,会发现只有三个线程,即核心线程量)
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        pool.execute(r);
        //创建临时线程(五个线程,即最大线程量)
        pool.execute(r);
        pool.execute(r);
        //不创建,拒绝策略被触发
       // pool.execute(r);
        //关闭线程池(开发中一般不会使用)
//        pool.shutdownNow();//立即关闭,即使任务没有执行完毕。会丢失任务的!
//        pool.shutdown();//会等待任务全部执行完毕后再关闭(建议使用)
    }
}
class MyExe implements Runnable{
    public void run(){
        for (int i = 1; i <=6 ; i++) {
            System.out.println(Thread.currentThread().getName()+"正在执行:"+i+"次");
        }
        //因为当前案例任务太简单,我们需要创建临时队列需要让三个核心线程忙,五个任务队列排满,所以让线程休眠以增加任务时间
        try {
            System.out.println(Thread.currentThread().getName()+"任务与线程绑定,线程进入了休眠");
            Thread.sleep(1000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、线程池处理Callable任务

import java.util.concurrent.*;
public class 多线程_5线程池处理Callable任务 {
    public static void main(String[] args) throws Exception {
        //线程池处理Callable任务
        //创建线程池对象
        
        ExecutorService pool=new ThreadPoolExecutor(3,5,
                6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        //给任务线程池处理
//        Callable c=new MyCallable2(100);
//        pool.submit(c);
       Future<String> f1=pool.submit(new MyCallable2(100));
        Future<String> f2=pool.submit(new MyCallable2(200));
        Future<String> f3=pool.submit(new MyCallable2(300));
        Future<String> f4=pool.submit(new MyCallable2(400));
        Future<String> f5=pool.submit(new MyCallable2(500));
//        String str=f1.get();
//        System.out.println(str);
        System.out.println(f1.get());
        System.out.println(f2.get());
        System.out.println(f3.get());
        System.out.println(f4.get());
        System.out.println(f5.get());
    }
}
class MyCallable2 implements Callable<String> {
    //                               v(泛型)
    private int n;
    public MyCallable2(int n) {
        this.n = n;
    }
    //重写call方法
    //案例:加法
    public String call() throws Exception {
        int sum = 0;
        for (int i = 1; i <=n; i++) {
            sum += i;
        }
        return Thread.currentThread().getName()+"执行 1-"+n+"的和,结果为:" + sum;
    }
}

到此这篇关于Java详解使用线程池处理任务方法的文章就介绍到这了,更多相关Java线程池内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java详解使用线程池处理任务方法

本文链接: https://lsjlt.com/news/148177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java详解使用线程池处理任务方法
    什么是线程池? 线程池就是一个可以复用线程的技术。 不使用线程池的问题: 如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的...
    99+
    2024-04-02
  • Java线程池Executor用法详解
    目录线程池类图线程池的好处new Thread的弊端线程池核心类-ThreadPoolExecutor使用Executors创建线程池Executors.newCachedThrea...
    99+
    2022-11-13
    Java 线程池 Java Executor Java 线程池 Executor
  • 如何理解Java线程池及其使用方法
    目录一、前言二、总体的架构三、研读ThreadPoolExecutor3.1、任务缓存队列3.2、拒绝策略3.3、线程池的任务处理策略3.4、线程池的关闭3.5、源码分析四、常见的四...
    99+
    2024-04-02
  • Java使用线程池实现socket编程的方法详解
    目录前言一、一个简单的C/S模型实现1.服务器:2.客户端:二、线程池使用方法1.新建一个线程池2.用Runnable接口实现线程3.创建线程对象并提交至线程池执行三、结合起来四、使...
    99+
    2024-04-02
  • 详解Java线程池的使用(7种创建方法)
    目录 1. 固定数量的线程池a.  线程池返回结果b. ⾃定义线程池名称或优先级2. 带缓存的线程池3. 执⾏定时任务 a.&nbs...
    99+
    2023-03-24
    Java线程池 Java线程池使用 线程池
  • Java使用线程池执行定时任务
    目录1.schedule2.scheduleAtFixedRate3.scheduleWithFixedDelay总结前言: 在 Java 语言中,有两个线程池可以执行定时任务:Sc...
    99+
    2024-04-02
  • 详解Java线程池的使用及工作原理
    目录一、什么是线程池?二、线程池要解决什么问题?三、线程池的使用四、常用阻塞队列五、线程工厂六、拒绝策略七、线程池的执行逻辑八、execute()方法九、执行流程一、什么是线程池? ...
    99+
    2024-04-02
  • 线程池是什么?线程池(ThreadPoolExecutor)使用详解
    点一点,了解更多https://www.csdn.net/ 本篇文章将详细讲解什么是线程池,线程池的参数介绍,线程池的工作流程,使用Executors创建常见的线程池~~~ 目录 点一点,了解更多 文章目录 一、线程池的概念 1.1线...
    99+
    2023-09-03
    java 数据结构 jvm 面试 java-ee
  • 模拟简单Java线程池的方法详解
    目录一、 前言二、线程池是什么?三、线程池构造方法ThreadPoolExecutor的构造方法的参数都是啥意思?四、模拟实现一个线程池总结一、 前言 为了实现并发编程,于是就引入了...
    99+
    2024-04-02
  • Java线程池的分析和使用详解
    目录1.   引言2.线程池的使用线程池的创建线程池的关闭3.   线程池的分析4.   合...
    99+
    2024-04-02
  • ThreadPoolExecutor线程池原理及其execute方法(详解)
    jdk1.7.0_79 对于线程池大部分人可能会用,也知道为什么用。无非就是任务需要异步执行,再者就是线程需要统一管理起来。对于从线程池中获取线程,大部分人可能只知道,我现在需要一个线程来执行一个任务,那我就把任务丢到线程池里,线程池里有空...
    99+
    2023-05-31
    线程池 execute lex
  • SpringBoot线程池和Java线程池的使用和实现原理解析
    目录SpringBoot线程池和Java线程池的用法和实现原理使用默认的线程池方式一:通过@Async注解调用方式二:直接注入 ThreadPoolTaskExecutor...
    99+
    2023-05-15
    SpringBoot线程池和Java线程池用法 SpringBoot线程池
  • java线程池使用的方法有哪些
    Java线程池使用的方法有以下几种:1. Executors类的静态方法:- newFixedThreadPool(int nThr...
    99+
    2023-08-20
    java
  • Java线程池的使用方法有哪些
    本文小编为大家详细介绍“Java线程池的使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程池的使用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。线程池的创建⽅法总共有 7 种,但...
    99+
    2023-07-05
  • 详解Java多线程tryLock()方法使用
    tryLock(long time, TimeUnit unit) 的作用在给定等待时长内锁没有被另外的线程持有,并且当前线程也没有被中断,则获得该锁,通过该方法可以实现锁对象的限时...
    99+
    2024-04-02
  • java中多线程与线程池的基本使用方法
    目录前言继承Thread 实现Runnale接口Callable线程池常见的4种线程池。总结前言 在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,服务器...
    99+
    2024-04-02
  • Java线程池工作原理和使用方法是什么
    这篇文章主要介绍“Java线程池工作原理和使用方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java线程池工作原理和使用方法是什么”文章能帮助大家解决问题。1. 为什么要使用线程池使用线程...
    99+
    2023-07-04
  • Java使用线程池批量处理数据操作
    Java使用线程池批量处理数据操作 疑问&思路: 如何保证数据按顺序批量处理 2.如何保证数据全部处理完统一返回 3.如何保证是多任务异步操作 4.如何提高运行效率,减少运行时间 使用ArrayLis...
    99+
    2023-09-08
    java 开发语言
  • Java线程池execute()方法怎么用
    本文小编为大家详细介绍“Java线程池execute()方法怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程池execute()方法怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先理解线程...
    99+
    2023-06-29
  • Java中四种线程池的使用示例详解
    在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大使用线程池的好处: 减少在创建和销毁线程上所花的时间以及系统资源的开销 如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 本文详细的给...
    99+
    2023-05-31
    java 线程池 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作