线程组

线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织

构造函数

ThreadGroup(String name)//默认parent为当前线程组
ThreadGroup(ThreadGroup parent, String name)

具体方法

//评估当前活跃的线程数,包括当前group和子group
//不准确因为有可能刚好有新线程加入或销毁
activeCount()
//返回当前活跃的子线程组
activeGroupCount()
//用于销毁线程组及其所有子组。 线程组必须为空,表示线程组中的所有线程都已停止,否则会抛出异常
//它不能作为线程退出的方法
destroy()
//复制当前线程组包括子组的线程到数组中,如果recurse=false,则不复制子组
enumerate(Thread[] list)
enumerate(Thread[] list, boolean recurse)
//返回当前线程组名字
getName()
//获得父线程组
getParent()
//打断所有线程
interrupt()
//等所有线程运行完成后会自动销毁,不需要手动调用destroy()
setDaemon(boolean daemon)
//标志位判断函数
isDaemon()
isDestroyed()
parentOf(ThreadGroup g)

作用

  • 通过ThreadGroup的activeCount获取当前活跃的线程
  • 通过ThreadGroup的interrupt方法中断所有的线程
public class ThreadGroupDemo2 {static class SleepTask implements Runnable {@Overridepublic void run() {try {TimeUnit.HOURS.sleep(1);// 休眠1小时} catch (InterruptedException e) {//ignore}}}public static void main(String[] args) {ThreadGroup threadGroup = new ThreadGroup("group");Thread thread1 = new Thread(threadGroup, new SleepTask(), "thread1");Thread thread2 = new Thread(threadGroup, new SleepTask(), "thread2");//activeCount方法用于返回当前活跃的线程,因为刚创建时2个线程都没有启动因此返回0assert threadGroup.activeCount() == 0;thread1.start();thread2.start();//线程组中的2个线程都启动了,active为2assert threadGroup.activeCount() == 2;threadGroup.interrupt();//中断之后,active为0assert threadGroup.activeCount() == 0;}
}

ThreadGroup_Java并发编程教程_田守枝Java技术博客​www.tianshouzhi.com

线程池

线程的创建和销毁需要消耗资源,所以通过线程池,用完的线程可以及时回收供其他程序使用,节约了创建和销毁的浪费。

课程里面这一部分并没有介绍并发包中的线程池知识,第三部分才会教,这里是手写线程池。

线程池的初始化

  • 初始化一定数量线程,进入阻塞状态,等待任务。通过线程队列管理
  • 启动线程池自身监控线程

任务调度

  • 任务放入任务队列,并通知线程开始取任务工作
  • 任务队列的放入和取出需要加锁

拒绝策略

  • 当任务队列过长时,可以做出选择,抛出异常,直接丢弃,阻塞,临时队列

闲时回收和忙时扩增

  • init--初始大小,active--活跃大小,max--最大线程数
  • 通过启动线程池的一个监控程序,实时对线程队列进行扩增或缩小

线程关闭

  • run状态下,通过标志位改变使线程结束
  • block状态下,通过interrupt让线程捕获异常使线程结束

parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池相关推荐

  1. postgres 支持的线程数_为什么 Java 坚持多线程不选择协程?

    先说结论:协程是非常值得学习的概念,它是多任务编程的未来.但是Java全力推进这个事情的动力并不大. 先返回到问题的本源.当我们希望引入协程,我们想解决什么问题.我想不外乎下面几点: 节省资源,轻量, ...

  2. Java高并发与多线程网络编程

    目录 一. 基础 1. 线程介绍 2. 创建并启动线程 3. 函数式接口编程 4. Thread 构造器 5. 守护线程 线程关系 6. join 7. interrupt 8. 优雅的结束线程 9. ...

  3. 高并发访问请求合并学习笔记

    用户请求 -- 网关 -- 微服务 -- db 这样的方式对高并发的请求的线程快速的相应,因为数据库的每秒执行的事务数有限,很容易出现慢查询,此时数据库就成为了第一个瓶颈 为了解决这个问题,有两种策略 ...

  4. Lua mysql insert 并发数_高并发 Nginx+Lua OpenResty系列(6)——Lua开发库Mysql

    Mysql客户端 lua-resty-mysql是为基于cosocket API的ngx_lua提供的Lua Mysql客户端,经过它能够完成Mysql的操做.默认安装OpenResty时已经自带了该 ...

  5. tomcat 请求超时_高并发环境下如何优化Tomcat性能?看完我懂了!

    来自:冰河技术 写在前面 Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? Tomcat运行 ...

  6. springboot tomcat默认线程数_记一次JAVA线程池的错误用法

    最近项目一个项目要结项了,但客户要求 TPS 能达到上千,而用我写的代码再怎么弄成只能达到 30 + 的 TPS,然后我又将代码中能缓存的都缓存了,能拆分的也都拆分了,拆分时用的线程池来实现的:其实现 ...

  7. Java高并发和多线程的面试笔试题——稳拿offer

    1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...

  8. 阿里P8架构师谈:高并发与多线程的关系、区别、高并发的技术方案

    什么是高并发? 高并发(High Concurrency)是一种系统运行过程中遇到的一种"短时间内遇到大量操作请求"的情况,主要发生在web系统集中大量访问收到大量请求(例如:12 ...

  9. 阿里P8架构师谈:高并发与多线程的关系、区别、以及高并发的系统解决方案

    原创: 架构师进阶 优知学院 5天前 " 很多只知道高并发,却不知道高并发与多线程的关系,以及真正的高并发应该如何设计技术方案" 01 - 什么是高并发 高并发(High Conc ...

最新文章

  1. 设计模式(观察者模式)
  2. notepad++的NppFTP插件远程连接linux操作系统
  3. 盈利模型的内容都有哪些?
  4. php 换一换 功能,vue换一换功能原型
  5. C++中1LL避免强制转换
  6. 折正方体-------------给你出道题
  7. html5 websocket与c,打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
  8. java 数据库连接 释放_JDBC连接数据库和释放连接
  9. 小程序 canvas旋转文字
  10. C++ 解决多对一问题
  11. mybatis中selectOne方法分析
  12. node文件通过不同的后缀名解析不同的文件类型
  13. 华为S5700交换机配置 不同vlan 间通信---eNSP
  14. 微商怎么引流?不懂这些就引不来流量!
  15. 【python】PLY词法分析实验「编译原理」
  16. Prometheus原理详解
  17. 哔哩哔哩(B站)的前端之路
  18. Windows通过修改注册表设置开机启动程序
  19. [实验室每日一题][20201124][Zip已知明文攻击]
  20. SPC控制图中的控制线应该用“3倍标准差“还是用“系数A2、D3、D4“公式来计算?

热门文章

  1. 图文详解mina框架
  2. 异常:Get请求提交过来的中文参数乱码
  3. springboot 配置多个请求服务代理
  4. Map的value转化为其它类型
  5. 新版Elemen Plus 国际化 1.0.2-beta.59(包含59)
  6. mysql2005卸载步骤,二次安装mysql步骤
  7. beetl 页面标签_05.Beetl标签函数以及定界符、占位符介绍---《Beetl视频课程》
  8. java 后台和前端的消息提醒_滴滴Java后台3面题目:网络+内存溢出+各种锁+高性能+消息队列...
  9. Spring Boot————ApplicationListener实现逃课事件监听
  10. linux 网络io命令详解,Linux下五种网络IO模型详解