
多线程篇
文章平均质量分 92
多线程篇
weisian151
大家一起来学习,讨论
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
操作系统内核态和用户态--4-内核态与用户态切换和CPU上下文切换
内核态与用户态切换:主要指的是CPU执行权限级别的变化,通常由系统调用触发,用于允许应用程序执行特定的特权操作,并不一定会导致进程或线程的变化。即:不一定会发生CPU上下文切换,是在一个时间片任务内处理的。CPU上下文切换:是指操作系统为了公平分配CPU资源而将控制权从一个进程或线程转移到另一个进程或线程的过程,这包括保存当前执行环境并加载新进程或线程的环境,开销相对较大。原创 2025-06-23 13:51:58 · 657 阅读 · 0 评论 -
操作系统内核态和用户态--3-Java线程和操作系统内核
Java线程与内核态/用户态的关系及优化实践 摘要: 本文深入探讨了Java线程与操作系统内核态、用户态的交互机制。Java线程由操作系统线程支持,在执行I/O操作、线程调度、同步机制等场景时会发生用户态到内核态的切换,带来性能开销。文章详细分析了常见触发切换的Java方法(如文件I/O、网络通信、线程同步等),并提供了优化建议:减少系统调用、使用线程池、异步I/O、无锁编程等技术。理解这些底层机制有助于开发者编写更高性能的Java程序,合理平衡用户态和内核态的资源使用。原创 2025-06-23 13:19:26 · 948 阅读 · 0 评论 -
操作系统内核态和用户态--2-系统调用是什么?
每一种编程语言,包括Java,在需要执行上述任何一类操作时,都会最终依赖于系统调用来实现。例如,在Java中当你调用FileInputStream.read()方法时,实际上是在后台触发了一个或多个系统调用来完成实际的数据读取工作。同样地,网络编程中的套接字操作也会涉及到一系列的系统调用来建立连接、发送和接收数据等。原创 2025-06-22 00:06:12 · 385 阅读 · 0 评论 -
操作系统内核态和用户态--1-基础认识
尽管每次单独的用户态到内核态切换的开销相对较小,但如果频繁发生这样的切换(例如在一个循环中不断进行系统调用),累积起来的开销就可能变得显著。例如,在高I/O负载的应用程序或网络服务中,频繁的上下文切换可以成为性能瓶颈。安全性:防止用户程序误操作或恶意攻击破坏系统。稳定性:隔离用户程序与内核,避免单个进程崩溃影响全局。资源管理:通过内核统一管理硬件资源,确保公平高效使用。原创 2025-06-22 00:03:32 · 1156 阅读 · 0 评论 -
多线程篇-11--线程池(线程池参数,newFixedThreadPool,ThreadPoolExecutor,ThreadPoolTaskExecutor,自定义拒绝策略)
自定义拒绝策略允许你在任务无法被线程池处理时,采取特定的行动。常用包括记录日志、发送通知、重试任务等。自定义拒绝策略类,实现RejectedExecutionHandler接口,复写rejectedExecution方法第一步:定义策略类// 实现 private final BlockingQueue < Runnable > backupQueue;// 复写 if(!原创 2024-12-02 20:45:08 · 927 阅读 · 0 评论 -
多线程篇-10--ThreadLocal介绍(处理器缓存机制和ThreadLocal的区别,内存泄漏等)
ThreadLocal 的核心思想是为每个线程维护一个独立的变量副本,这些副本存储在 ThreadLocalMap 中,。线程Thread类和ThreadLocalMap之间并没有关系,它们之间必须通过ThreadLocal才能建立关系。每个 线程只有在第一次使用ThreadLocal对象的get或 set 方法时才会创建一个 ThreadLocalMap,用于存储自身的 ThreadLocal 变量的键值对;原创 2024-12-02 12:42:44 · 1227 阅读 · 0 评论 -
多线程篇-1--入门概念(进程,线程,并行,并发,同步,异步等理解)
串行,即同一时间内仅1个人干活;适用于简单的任务和有严格依赖关系的任务。并行,即同一时间内有多个人干活;适用于计算密集型任务且任务没有严格的依赖关系。并发,即每个人来回切换者活干(可以是串行,也可以并行)。适用于需要提高系统响应性和效率的场景,可以在单处理器或多处理器上实现。原创 2024-11-30 10:16:59 · 843 阅读 · 0 评论 -
多线程篇-7--线程通信(等待/通知机制,等待/超时机制,CountdownLatch,CyclicBarrier,BlockingQueue等)
在等待/通知机制中,我们用到了wait()方法暂停当前线程,之后等待同一把锁的其他线程通过notify() 方法唤醒等待的线程。wait()方法除了无参的方法外,还包含有参的超时方法 wait(long timeout)。这种有参的方式,指定了一个等待时间,允许线程在等待一定时间后自动醒来,即使没有收到 notify() 通知。这在某些情况下非常有用,可以避免线程无限期地等待。在实际开发中,推荐使用有参的wait(long timeout)方法。原创 2024-12-01 14:57:01 · 798 阅读 · 0 评论 -
多线程篇-9--锁的使用及分类(可重入锁,读写锁,锁降级,死锁,LockSupport,乐观锁,悲观锁,分段锁等)
Java 中,锁是一种用于控制多线程并发访问共享资源的机制。合理的锁机制可以确保线程安全,避免数据竞争和不一致的问题。Java 提供了多种锁机制,包括内置锁(即 synchronized 关键字)、显式锁(如 ReentrantLock)、读写锁(如 ReentrantReadWriteLock)等。LockSupport 是 Java 并发工具类中的一个重要工具,位于 java.util.concurrent.locks 包中。它提供了一系列静态方法,用于精确地控制线程的挂起和唤醒操作。原创 2024-12-01 23:12:14 · 1024 阅读 · 0 评论 -
多线程篇-3--java内存模型(主内存,共享内存,三大特性,指定重排)
如果在本线程内观察,所有的操作都是有序的;(单线程运行结果)如果在一个线程中观察另一个线程,所有的操作都是无序的。(多线程运行结果,可能会不安全)前半句是指“线程内似表现为串行的语义”(Within-Thread As-If-Serial Semantics),在同一个线程内部,程序员看到的操作(例如读写变量)是按照代码中定义的顺序进行的。这意味着对于单个线程而言,它自己的所有操作看起来都是遵循程序中指定的顺序执行的。这是因为在单个线程中,CPU指令通常会按照源代码中编写的顺序来执行。原创 2024-11-30 17:10:53 · 1075 阅读 · 0 评论 -
多线程篇-4--重点概念1(volatile,Synchronized,内存屏障,MESI协议)
Synchronized是Java中用于实现线程同步的关键字。它通过确保同一时间只有一个线程可以访问某个资源来避免多线程环境下的竞态条件和数据不一致问题。Synchronized主要通过锁机制来实现这一点。Synchronized是Java中实现线程同步的一种简单而强大的机制。它通过锁机制确保在同一时间只有一个线程可以访问被保护的资源,适用于多种需要线程安全的场景。然而,在高并发场景下,需要权衡性能和安全性,选择合适的同步机制。(1)、写屏障(Store Barrier)确保在写入volatile。原创 2024-11-30 17:59:48 · 1224 阅读 · 0 评论 -
多线程篇-2--硬件基础介绍(CPU时间片,上下文切换,资源限制,CAS,连接池等理解)
1、每种时间片分配算法都有其适用的场景和优缺点。选择合适的调度算法需要根据系统的具体需求和特性来决定。例如,对于交互式系统,时间片轮转算法通常是一个好的选择;而对于实时系统,实时调度算法更为合适。多级反馈队列调度则适用于需要高度灵活性和适应性的复杂系统。2、操作系统通过监控系统负载、进程特性、用户需求等因素,动态选择和调整调度算法,以优化系统的性能和响应性。具体的方法包括负载感知调度、优先级调整和队列管理等。通过这些方法,操作系统可以灵活地适应不同的应用场景,确保系统的高效运行。原创 2024-11-30 14:28:17 · 1647 阅读 · 0 评论 -
多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)
(1)、用户线程:普通的Java线程,由程序员显式创建。(2)、守护线程:后台线程,用于提供服务,当所有用户线程结束时自动终止。(3)、主线程:JVM自动创建的第一个线程,执行main方法中的代码。(4)、工作线程:用于执行具体任务的线程,通常由线程池管理。(5)、线程池中的线程:由线程池管理的线程,可以重复使用,减少开销。1、概述你可以在Spring Boot应用中手动创建和管理线程,例如通过实现Runnable接口或继承Thread类。2、创建时机在你需要的时候手动创建。代码示例。原创 2024-11-30 22:32:06 · 1620 阅读 · 0 评论 -
多线程篇-6--线程生命周期(线程生命周期,线程状态切换,线程中断,及常用的线程方法)
线程中断是Java中的一种机制,用于请求线程停止其当前工作并退出。中断是一种协作机制,而不是强制性的终止。这意味着被中断的线程可以选择如何处理中断请求,通常会通过检查中断标志来决定是否终止当前操作。原创 2024-12-01 11:35:50 · 1549 阅读 · 0 评论 -
多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)
线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果,不会出现数据不一致或其他错误行为。同步容器(Synchronized Containers)是 Java 提供的一种线程安全的集合类,它们通过在方法内部添加同步机制来确保线程安全。Java 标准库中的 Collections 类提供了一些静态方法,可以将普通的集合类转换为同步集合类。同步容器可以简单地理解为使用synchronized实现同步后的容器。原创 2024-12-01 20:58:11 · 1649 阅读 · 0 评论