首页 > 编程语言 >Java线程之线程池

Java线程之线程池

时间:2024-07-09 10:26:58浏览次数:16  
标签:Runnable Java int 创建 任务 线程 执行

1、什么是线程池?

                线程池:用来管理线程对象的池子

2、为什要使用线程池?

               1、解决频繁的创建和销毁线程消耗的性能

                2、解决大量创建线程而导致的内存泄露问题

                 注意: 一个线程大约占用内存1M

3、Java中是如何创建线程池

                1、通过工具类完成线程池的创建【Executors】语法简单。但是阿里巴巴不建议使用 

                        3.1、Executors中常用的方法:

 

                   2、通过线程池类:ThreadPoolExecutor类。语法复杂,但是阿里巴巴建议使用。灵活

 ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(10);
        /**
         * corePoolSize 初始化线程数量
         * maximumPoolSize最大线程数
         * keepAliveTime,线程维持时间
         * TimeUnit unit 时间单位
         * BlockingQueue<Runnable> workQueue 堵塞队列
         *
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 5, 10, TimeUnit.SECONDS,arrayBlockingQueue);
        for (int i = 0; i <4 ; i++) {

            threadPoolExecutor.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"=========");
                }
            });
        }
    }

 

 

                                     3.2、ThreadPoolExecutor类中常用的方法

    • voidshutdown()有序关闭线程池,未执行完的任务将继续执行,但不接收新的任务

 以下三种方法是AbstractExecutorService中实现ExecutorService接口中的方法

    • <T> Future<T>submit(Callable<T> task)

      提交值返回任务以执行,并返回代表任务待处理结果的Future。

      Future<?>submit(Runnable task)

      提交一个可运行的任务执行,并返回一个表示该任务的未来。

      <T> Future<T>submit(Runnable task, T result)

      提交一个可运行的任务执行,并返回一个表示该任务的未来。

                                      3.3 方法中Runnable参数的三种写法

                                                   1、创建实现了Runnable接口的类

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            System.out.println(Thread.currentThread().getName()+"============"+i);
        }
    }


     public static void main(String[] args) {
       
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        //创建一个类实现Runnable接口重新run方法
        for (int i = 0; i <3 ; i++) {
                executorService.execute(new MyRunnable());
        }
       


    }
}

                                                   2、匿名内部类

 //2、匿名内部类
        for (int i = 0; i <3 ; i++) {
            executorService.execute(new Runnable(){

                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"===============");
                }
            });
        }

                                                   3、lamba表达上      

 //lambda表达式
        for (int i = 0; i <3 ; i++) {
            executorService.execute(()-> System.out.println(Thread.currentThread().getName()+"========="));
        }

                                     3.4 execite和submit方法的区别?

                                                 这两个方法都是用来执行线程任务,但是execute属于Executor类中的方法,而submit属于ExecutorService接口中的方法。而且submit可以执行runnable和callable类型的任务,而execute只能执行Runnable类型的任务。submit执行完任务后有返回结果               

 

标签:Runnable,Java,int,创建,任务,线程,执行
From: https://blog.csdn.net/qq_58076226/article/details/140285079

相关文章

  • 1047java jsp SSM旅游管理系统旅游路线推荐特色产品酒店预约(源码+文档+PPT+运行视频+
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • Java中的类加载器
     类加载器1.什么是类加载器?启动类加载器(BootstrapClassLoader):这是JVM自带的类加载器,负责加载Java的核心类库,如rt.jar等。由于安全原因,启动类加载器加载的类不能被其他类加载器加载的类所引用。扩展类加载器(ExtensionClassLoader):负责加载Java的扩展类库,一般位于$JAVA_H......
  • java反射技术学习
    反射反射:加载类,并允许以编程的方式解剖类中的各种成分(成员变量,方法,构造器等)反射学什么?学习获取类的信息、操作他们1.反射第一步:加载类、获取类的字节码:Class对象 packagecom.itheima.reflect; ​ publicclassreflect1{   publicstaticvoidmain(String[]......
  • JavaScript介绍、初识(注释语法、书写位置、书写规范)、常量和变量、数据类型Number、
    【一】JavaScript介绍【1】什么是jsjs也是一门编程语言,他可以写后端代码【2】什么是node.js前端由于非常受制于后端,所以有一些人异想天开想要通过js来编写后端代码一统江湖由此开发了一个叫nodejs的工具(支持js跑在后端服务器上)但是并不能完美的实现【3】JavaScript......
  • Java 修饰符
    Java中的修饰符用于修饰类、方法、变量等元素,它们控制了这些元素的访问性、继承性和其他特性。主要的修饰符包括:1.**访问控制修饰符**:  -**public**:可以被任何其他类访问。  -**protected**:可以被同一包内的类及其子类访问。  -**default(nomodifier)*......
  • Java计算机毕业设计网上求职招聘系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和普及,网络已成为人们获取信息、交流互动的重要平台。在就业市场日益竞争激烈的环境下,传统的求职招聘方式已难以满足求职者......
  • Java计算机毕业设计幼儿园管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的深入发展,幼儿园作为儿童启蒙教育的重要阶段,其管理模式的现代化与智能化已成为必然趋势。传统的手工记录、纸质管理方式不仅效率低下......
  • Java计算机毕业设计校园共享单车系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和学生人数的增加,校园内的交通问题日益凸显。传统的自行车管理方式不仅效率低下,还存在车辆调度不灵活、租赁流程繁琐、车辆维......
  • 基于Java+SpringBoot+Vue的影城管理系统的设计与开发(源码+lw+部署文档+讲解等)
    文章目录前言项目背景介绍技术栈后端框架SpringBoot前端框架Vue数据库MySQL(MyStructuredQueryLanguage)具体实现截图详细视频演示系统测试系统功能测试系统测试结论代码参考数据库参考源码获取前言......
  • Java高级-线程池
    1.什么是线程池?用于管理线程对象的池子。2.为什么使用线程池?一个线程大约占用内存1M。 1.解决频繁创建线程和销毁线程消耗的性能。 2.解决大量创建线程而导致的内存泄漏问题。3.如何创建线程池?Java中提供了两种方式:第一种:通过工具类完成线程池的创建-:语法简......