Java 21的Concurrency的笔记

news/2025/1/15 18:06:33/文章来源:https://www.cnblogs.com/jackieathome/p/18403365
  • Java Core Libraries
  • Concurrency
    Concurrency API包括:
    • Virtual threads

    • Structured concurrency

    • Task scheduling framework
      即线程池,常见、易用。

    • Fork/join framework
      即ForkJoinPool,不过目前还没有在项目中实际使用过。

    • Concurrent collections
      线程安全的容器,比如BlockingQueue/BlockingDeque。

    • Atomic variables
      原子变量,在java.util.concurrent.atomic下的类,比如AtomicInteger。

    • Synchronizers
      比如Semaphore/CyclicBarrier/CountdownLatch/Phaser/Exchanger。
      不过目前在项目交付过程中,暂时没有使用过。

    • Locks
      java.util.concurrent.locks包内的类。
      目前在项目交付时,Java语言的关键字synchronized的应用场景更多一些。

    • Nanosecond-granularity timing
      之前在项目中,大量使用的是System.currentTimeMillis,在时间跳变时,计算时间差时可能得到负数。
      System.nanoTime作为后起之秀,据说不存在类似的问题。

    • Thread-local variables
      曾经使用过ThreadLocal,不过机会不多,可能场景比较简单,没有遇到过什么问题。

Virtual Threads

在Linux系统下,按照用户线程和内核线程的关系来分类:

  • 1:1,即一个用户线程,对应一个内核线程。
    比如Linux的Pthread,JDK的Thread,STL的std::thread。
    优点是实现简单,线程的运行、调度、运行,均由操作系统完成。
    缺点是线程的数量受限,随着线程数量上升,操作系统调整线程运行的成本逐步上升。
  • N:1,即多个用户线程,对应一个内核线程。
    实现复杂,用户线程的调度、运行等工作在用户态,因此可以创建更多的线程。
    缺点是当一个用户线程被IO阻塞时,绑定在内核线程上的其它用户线程,同步被阻塞。
  • M:N,即用户线程和内核线程为多对多关系,二者不是强绑定关系。
    实现复杂,可以解决N:1方案存在的问题。

线程的使用方式:

  • 同步模式
    • 每请求每线程
    • 线程池
    • Reactor模式
  • 异步模式
    • 异步任务
    • 消息队列

官方文档

  • Virtual Threads

    However, a virtual thread isn't tied to a specific OS thread. A virtual thread still runs code on an OS thread. However, when code running in a virtual thread calls a blocking I/O operation, the Java runtime suspends the virtual thread until it can be resumed. The OS thread associated with the suspended virtual thread is now free to perform operations for other virtual threads.

    依据上述描述,Java的Virtual Threads有点类似前述的M:N的关系。

    Virtual threads are suitable for running tasks that spend most of the time blocked, often waiting for I/O operations to complete. However, they aren't intended for long-running CPU-intensive operations.

    依据上述说明,Java的Virtual Threads适合执行经常阻塞的任务,而不是长时间的计算密集型任务。

  • JEP 444

  • java.lang.Thread

  • Foreign Function and Memory API

参考资料

  • 线程的三种实现模型
  • linux:线程的3种实现方式(内核级,用户级和混合型)
  • 线程模型简介
  • Netty的三种线程模型
  • Netty(1)线程模型【常识】
  • 【Linux线程(三)】生产者消费者模型
  • Linux线程(四) 生产者消费者模型
  • 多线程(一)高并发和多线程的关系
  • 多线程(二)使用多线程的准备知识
  • 多线程(三) java中线程的简单使用
  • 多线程(四) 如何停止线程
  • 多线程(五) java的线程锁
  • 多线程(五) java的线程锁
  • 多线程(六)线程间的通信和协作
  • 多线程(七)JDK原生线程池
  • 多线程(八)常用的线程模型

Structured Concurrency

  • Structured Concurrency

    This is a preview feature.

    作为预览版的特性,相关的API的设计目前仍然存在变数,因此当前不建议在项目中使用。
    从官方提供的样例看,对于某些临时创建线程池执行任务的场景,可以简化实现代码,同时质量更好。

        Callable<String> task1 = ...Callable<Integer> task2 = ...try (var scope = new StructuredTaskScope<Object>()) {Subtask<String> subtask1 = scope.fork(task1);Subtask<Integer> subtask2 = scope.fork(task2);scope.join();... process results/exceptions ...} // close
    
  • JEP 453

  • Preview Language and VM Features

Thread-Local Variables

  • Thread-Local Variables
    不易跟踪、管理的可变性。
    生命周期的管理,创建、传播、读、写等,潜在的内存泄漏问题。
    不恰当的使用或者滥用,可能导致占用过多的内存资源。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

河道漂浮物识别检测系统

河道漂浮物识别检测系统依据智能视频分析,视频图像信息内容自动分析和识别,不用人工操纵;检测漂浮物(塑料泡沫、包装袋、堤岸漂浮植物种类等)生物群落等),精确提交检测结果,储存有关信息,便捷查验管理。河道漂浮物识别检测系统实时监控河面状况,对违法行为开展警报、…

厨师帽厨师服口罩穿戴人脸识别-智慧食安监督系统

厨师帽厨师服口罩穿戴人脸识别就是指在监管前提下提早设定查验区域,当规定区域有不戴厨师帽不穿戴厨师服或者口罩,系统自动会警报。厨师帽厨师服口罩穿戴人脸识别-智慧食安监督系统根据视频智能分析商品,在数据分析系统优化计算方法服务中,扩展了非厨房工作人员 进入后厨以…

web 开发(4)- 数据库sql

sql创建数据库sudo mysql 进入 mysql> create database book_01安装 mysqlclient sudo apt-get install libmysqlclient-dev sudo apt-get update 远程控制SQL得到远程密码 sudo cat /etc/mysql/debian.cnf 获取IP地址 ifconfig sudo mysql 问题一,不允许远程控制 先进入本…

隧道视频监控智能分析系统

隧道视频监控智能分析系统是道路交通方式不可缺少的监管手段,隧道视频监控智能分析系统有效进行交通违法和紧急事件的全自动识别和交通出行流量的全自动数据分析,并依据城市路口、城市道路、高速路、道路、公安机关监控、隧道、公路桥梁、地下停车场等各类实际路面生态环境开…

煤矿皮带急停报警监测系统 煤矿皮带运行监控系统

煤矿皮带急停报警监测系统运用煤矿地底现场已有摄像头的视频监控画面图像,赋能现场传统摄像机具备Ai识别分析报警、监管和鉴别工作人员、机器设备、自然环境等使用标准、皮带锚索、煤矸石砖、堆煤、非法运输等异常现象、工作人员没戴安全头盔、擅自离岗、路面浓烟、水、影片等…

个人项目-论文查重

这个作业属于哪个课程 班级链接这个作业要求在哪里 个人项目 - 作业 - 计科22级12班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 准备、创建、开发、管理、测试个人项目GitHub项目链接 https://github.com/chocohQL/3122004348-01 可运行 jar 已发布在最新 releases 项目…

加油站视频监控智能识别分析

加油站视频监控智能识别分析根据AI视频识别的加油站智能监控解决方案:依据加油站现场已经存在的高清摄像头搜集加油站视频在此基础上加油站视频监控智能识别加油站监控画面中的人的行为或者车的视频图象。智能识别工作人员行为状态,是否存在违规操作,系统自动识别员工,不戴…

Windows NoiLinux

在 Windows 下使用 NoiLinux ubuntu-noi-v2.0.iso下载 ubuntu-noi-v2.0.iso打开 VMWare,创建新的虚拟机 -> 自定义(高级)-> 下一步 -> 下一步 -> 安装程序光盘映像文件(iso),选择下载的 ubuntu-noi-v2.0.iso后面直接跳过就行了,可能需要你留意的是分配处理器内…

通用加工软件 PowerNC

可以取代维宏的NCStudio软件 除了支持标准NC文件外,还可以集成一个CAM软件;

视野修炼-技术周刊第100期 | CSS observer

① style-observer - 监听 CSS 变化 ② Jimp - JS 图片处理库 ③ yocto-spinner - 终端旋转 loading ④ revideo - Code 生成视频 ⑤ button-stealer - 按钮收藏 ⑥ 免费头像合集 ⑦ 应该使用的HTML TOP5 特性 ⑧ 3.78MB 大小的 JS 服务 Docker 镜像欢迎来到第 100 期的【视野修…

CTF逆向:将数组作为函数代码执行

例题 攻防世界 BABYREflag判定条件为这个 if ( v5 == 14 && (*judge)(s) )注意judge本质上是一个数组,(*judge)(s)则说明judge数组中的内容被当做代码执行 但前面又有for ( i = 0; i <= 181; ++i )judge[i] ^= 0xCu;judge数组中的内容进行加密 所以需要进行patchsta…

11-HashSet

HashSet 特点放入Integer类型数据//创建一个HashSet集合:HashSet<Integer> hs = new HashSet<>();hs.add(19);hs.add(5);hs.add(20);hs.add(19);//存重复数据hs.add(41);hs.add(0);System.out.println(hs.size());//6个数据,只存了5个System.out.println(hs);//[…