码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java多线程之线程池


    1、什么是线程池

    在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务。

    线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。另外,通过适当的调整线程中的线程数目可以防止出现资源不足的情况。

    public class Thread1 implements Runnable {
    
    	@Override
    	public void run() {
    		System.out.println(Thread.currentThread().getName()+"在执行任务");
    		// TODO Auto-generated method stub
    		for(int i=1;i<=100;i++)
    			System.out.println("a..."+i);
    		
    	}
    	
    	
    
    }

    public class Thread2 implements Runnable {
    	
    	@Override
    	public void run() {
    		System.out.println(Thread.currentThread().getName()+"在执行任务");
    		// TODO Auto-generated method stub
    		for(int i=1;i<=100;i++)
    			System.out.println("b..."+i);
    		
    	}
    
    }

    public class Thread3 implements Runnable {
    	
    	@Override
    	public void run() {
    		System.out.println(Thread.currentThread().getName()+"在执行任务");
    		// TODO Auto-generated method stub
    		for(int i=1;i<=100;i++)
    			System.out.println("c..."+i);
    		
    	}
    
    }

    从线程池中取出线程对象执行任务,任务执行完毕 ,会返回到线程池中.

    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
        
            //1.创建线程池
            ExecutorService pool=  Executors.newFixedThreadPool(2);
            
            //2.给线程池分配任务
            pool.submit(new Thread1());
            
            pool.submit(new Thread2());
            
            pool.submit(new Thread3());
            
            pool.shutdown(); //销毁线程池 一般不用销毁
            
            
        }
    
    }
  • 相关阅读:
    2023 年高教社杯全国大学生数学建模竞赛获奖名单(初稿)公示
    EAV模型(实体-属性-值)的设计和低代码的处理方案(1)
    JSP协同办公eclipse定制开发mysql数据库BS模式java编程OA系统
    《研发效能(DevOps)工程师》课程简介(三)丨IDCF
    Webpack构建速度优化
    【photoshop学习】用 Photoshop 做的 15 件创意事
    「PAT乙级真题解析」Basic Level 1081 检查密码 (问题分析+完整步骤+伪代码描述+提交通过代码)
    UG NX二次开发(C#)-计算直线到各个坐标系轴向的投影角度
    【Vue2.0学习】— 列表排序(四十一)
    海康摄像机使用GB28181接入SRS服务器的搭建步骤---源码安装的方式
  • 原文地址:https://blog.csdn.net/CR2567001684/article/details/126082227
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号