线程池工作原理

news2024/12/23 10:46:03

 

1:处理Runnable 任务的方法

 

 

package ThreadPooITest;


import java.util.concurrent.*;

//目标:线程池创建
public class ThreadPoolTest {
            public static void main(String[] args) {
              //1:通过ThreadPoolExector




             ExecutorService pool=  new ThreadPoolExecutor(3, 5, 8, TimeUnit.SECONDS,
                        new ArrayBlockingQueue<>(4),Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.CallerRunsPolicy());


                MyRunnble myRunnble = new MyRunnble();
               /* pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);//复用前面核心线程
                pool.execute(myRunnble);//复用前面核心线程
*/

                pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);//线程池自动创建一个新的线程 。自动处理这个任务 自动执行
                pool.execute(myRunnble);
                pool.execute(myRunnble);
                pool.execute(myRunnble);
                pool.execute(myRunnble);
             //到了临时线程的创建时机了
                pool.execute(myRunnble);
                pool.execute(myRunnble);
                //看到新任务的拒绝的时机了
                pool.execute(myRunnble);


               // pool.shutdown();//等待线程都跑完再关闭线程池
             //  pool.shutdownNow(); //立刻关闭线程池


            }
}

 

package ThreadPooITest;

public class MyRunnble implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"==> 输出666~~");

        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2:处理callable任务

package ThreadPooITest;


import java.util.concurrent.*;

//目标:线程池创建
public class ThreadPoolTest1 {
            public static void main(String[] args) throws Exception, InterruptedException {
              //1:通过ThreadPoolExector

             ExecutorService pool=  new ThreadPoolExecutor(3, 5, 8, TimeUnit.SECONDS,
                        new ArrayBlockingQueue<>(4),Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.CallerRunsPolicy());


        Future<String> f1= pool.submit(new MyCallable(100));
        Future<String> f2= pool.submit(new MyCallable(200));
        Future<String> f3= pool.submit(new MyCallable(300));
        Future<String> f4= pool.submit(new MyCallable(400));
       // Future<String> f5= pool.submit(new MyCallable(500));

                System.out.println(f1.get());
                System.out.println(f2.get());
                System.out.println(f3.get());
                System.out.println(f4.get());

            }
}
package ThreadPooITest;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<String> {
    private int n;
    public MyCallable(int n){
        this.n=n;
    }

    @Override
    public String call() throws Exception {
        int sum=0;
        for (int i=1;i<=n;i++){
             sum+=i;
        }

        return Thread.currentThread().getName() +"线程求1-"+n+"的和是:"+sum;
    }
}

 

3:Execcutois线程池的工具类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据模型设计必读方法论!很实用

数据架构的重要构件之一是数据模型&#xff0c;当然从数据架构的视角来说的数据模型是指企业级数据模型。本篇文章更多是讨论如何设计和管理数据模型&#xff0c;此处的数据模型是泛指在组织中通过数据建模的过程&#xff0c;来发现、分析和确定数据需求范围&#xff0c;并用于…

6.(vue3.x+vite)路由传参query与params区别

前端技术社区总目录(订阅之前请先查看该博客) 效果截图 一:路由传参有两种方式:params与query params与query区别 1:param,路由带“/”,query带“?” 2:query传过来的参数会显示到地址栏中 而params传过来的参数可以显示参数或隐藏参数到地址栏中(vue-router 4.1.4不…

MSVCR80.DLL 丢失修复方法:完美解决你的问题!

MSVCR80.DLL 是 Microsoft Visual C Redistributable Package 中的一个动态链接库文件&#xff0c;它扮演着非常重要的角色。然而&#xff0c;当你在运行某些应用程序时&#xff0c;可能会遇到“MSVCR80.DLL 丢失”错误。这时候你就需要采取一些措施来解决这个问题了&#xff0…

待办任务清单app哪个软件好用?

手机成了我们生活的延伸&#xff0c;而对于繁忙的工作节奏&#xff0c;一款好用的任务提醒软件就如同一位贴心的助手&#xff0c;时刻提醒我们的待办任务。在众多软件中&#xff0c;敬业签是一款比较不错的记录待办任务清单的工具。 在手机上&#xff0c;打开敬业签&#xff0…

swagger gin 文档接口排序,写了一个小工具,自定义接口排序

起因没找到swagger 自定义接口排序 代码原理就是替换 swag init 生成的docs.go paths 部分 &#xff0c;取到swagger.json paths 部分排序&#xff0c;正则匹配docs.go paths 部分&#xff0c;然后通过自定义排序&#xff0c;替换paths部分&#xff0c;这个根据自定义的需求来…

Stable Diffusion WebUI报错RuntimeError: Torch is not able to use GPU解决办法

新手在安装玩Stable Diffusion WebUI之后会遇到各种问题&#xff0c; 接下来会慢慢和你讲解如何解决这些问题。 在我们打开Stable Diffusion WebUI时会报错如下&#xff1a; RuntimeError: Torch is not able to use GPU&#xff1b;add --skip-torch-cuda-test to COMMANDL…

操作系统面试常问问题--保研及考研复试

前言&#xff1a; Hello大家好&#xff0c;我是Dream。今年保研上岸山东大学人工智能专业 &#xff08;经验贴&#xff09;&#xff0c;现在将我自己的专业课备考知识点整理出来&#xff0c;分享给大家&#xff0c;希望可以帮助到大家&#xff01;这是重点知识总结&#xff0c;…

基于Pix4D使用无人机光学影像制作正射影像(DOM)和数字表面模型(DSM) 操作步骤

基于Pix4D使用无人机光学影像制作正射影像&#xff08;DOM&#xff09;和数字表面模型&#xff08;DSM&#xff09; 操作步骤 0. 前言1.获取无人机光学影像2.DOM和DSM3.操作步骤3.1 初始界面3.2 新建项目3.3查看处理过程报告3.4查看处理进度和成果 4.在ArcMap中打开DSM和DOM 0.…

Linux高性能服务器编程——ch1笔记

第1章 TCP/IP 协议族 1.1 TCP/IP 协议族体系结构以及主要协议 数据链路层 网卡接口的网络驱动程序&#xff0c;以处理数据在物理媒介&#xff08;比如以太网、令牌环等&#xff09;上的传输。 协议&#xff1a;ARP、RARP&#xff0c;实现IP地址和机器物理地址之间的转换。 网络…

适用于小型企业的远程控制软件分享!

远程控制软件对小型企业的好处 远程控制软件允许用户从远程位置连接到计算机&#xff0c;然后访问和使用远程计算机上的资源。这对于需要为客户提供远程技术支持的企业来说&#xff0c;是一个非常重要的工具。 借助远程控制软件&#xff0c;小型企业人员在远程工…

同城代驾开源版小程序开发

同城代驾开源版小程序开发 功能特性描述&#xff1a; 定价模式&#xff1a;本系统支持灵活的计价模式&#xff0c;包括白天和夜晚的起步价、起步里程、每公里价以及超时费用&#xff0c;从而满足不同时段的定价需求。 实时路径计算&#xff1a;通过集成腾讯地图的软件开发工…

学习c#桌面应用编程 --- 我的第一个游戏

场景 我需要做一个c#桌面窗口软件&#xff0c;但是我曾经都是专职于java开发&#xff0c;但是java对windows并不是特别友好(awt除外)&#xff0c;于是必须需要掌握c#桌面编程&#xff0c;所以我需要手动做一个小游戏&#xff0c;来学习c#的一些基本桌面应用的知识。 开始 这…

2023年底,软件测试行业的几大发展趋势,你关注到几个?

以下为作者的观点&#xff1a; 现在是2023年&#xff0c;技术继续快速发展&#xff1b;软件测试领域也在不断发展扩大。从功能到自动化&#xff0c;再到到人工智能&#xff0c;软件测试的未来看起来与过去截然不同。软件测试对于任何高质量、可靠软件的开发都是至关重要的。然…

算法刷题总结(全)

刷题总结 by lds 2023-9-5 文章目录 1.数组/字符串1.1 合并两个有序数组【easy】1.2 移除元素【easy】1.3 删除有序数组中的重复项【easy】1.4 删除有序数组中的重复项II【mid】1.5 多数元素【easy】1.6 大数相加---【美团面试手撕题目】1.7 轮转数组【mid】1.8 买卖股票的最佳…

嵌入式和 Java选哪个?

今日话题&#xff0c;嵌入式和 Java 走哪个?对于嵌入式领域有浓厚兴趣的人&#xff0c;并不会比Java行业薪资低&#xff0c;处于上中游水平。特别是从2020年开始&#xff0c;嵌入式领域受益于芯片产业的兴起&#xff0c;表现出了强劲的增长势头。薪资水平受多方面因素影响。以…

TCP/IP五元组

什么是五元组规则&#xff1f; 五元组是通信术语&#xff0c;英文名称为five-tuple,或5-tuple&#xff0c;五元组包括源IP地址(source IP)、源端口(source port)、目的IP地址(destination IP)、目的端口(destination port) 和 传输层协议(the layer 4 protocol)的五个量集合。…

尝试使用jmeter-maven-plugin

前提准备 1、maven项目 2、已安装JMeter、Jenkins、maven、jdk 环境要求&#xff1a; jmeter>5.6.2 maven >3.9 jdk>1.8 Jenkins ? 备注&#xff1a;jmeter-maven-plugin 无需下载&#xff0c;可查阅相关地址&#xff1a;GitHub - jmeter-maven-plugin/jmete…

CSS属性:定位属性+案例讲解:博雅互动 前端开发入门笔记(五)

CSS中的定位属性用于指定HTML元素在文档中的位置。常用的定位属性有以下几种&#xff1a; position&#xff1a;用于定义元素的定位方式。 static&#xff08;默认值&#xff09;&#xff1a;元素遵循正常的文档流&#xff0c;不进行特殊的定位。relative&#xff1a;相对定位&…

2023年【起重机械指挥】考试题库及起重机械指挥证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机械指挥考试题库是安全生产模拟考试一点通总题库中生成的一套起重机械指挥证考试&#xff0c;安全生产模拟考试一点通上起重机械指挥作业手机同步练习。2023年【起重机械指挥】考试题库及起重机械指挥证考试 1、…

Python股票交易中的卡尔曼滤波器

卡尔曼滤波器 什么是卡尔曼滤波器&#xff1f; 鉴于测量结果会受到噪声的影响&#xff0c;卡尔曼滤波器 (KF) 算法可以恢复被跟踪的底层对象的真实状态。该算法有两个步骤&#xff1a;预测步骤和测量更新步骤。该滤波器结合了噪声传感器的测量结果和基于物理的模型的预测&…