
多线程
文章平均质量分 87
纯洁的小魔鬼
只有风暴才能击倒大树
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java线程池和阻塞队列
线程池任务增加过程:注:此图为ThreadPoolExecutor的机制,但不代表全部,比如dubbo提供的线程池 EagerThreadPoolExecutor,就是先起线程到最大值,再进队列 b.拥有六个参数:比a多了参数: c.拥有六个参数:比a多了参数: d.拥有七个参数:但是仔细看的话,ThreadPoolExecutor虽然提供了四个5到7个参数,但是在方法体中,均是 7 个参数。此队列常用方法:任务队列是基于阻塞队列实现的原创 2020-08-17 01:16:24 · 4203 阅读 · 4 评论 -
多线程任务监视器
本文介绍了Java线程池任务超时控制的几种实现方案。首先分析了线程池中任务阻塞导致线程无法释放的问题,提出通过设置最大执行时长来强制终止超时任务。然后详细比较了三种实现方式:1)在子线程中再创建线程并利用join()方法监控;2)使用ScheduledExecutorService定时检查任务状态;3)结合CompletableFuture和ScheduledExecutorService实现更精确的监控。重点阐述了第三种方案的工作原理:通过CompletableFuture作为监控器,当任务正常完成或异常原创 2024-04-03 16:49:40 · 1111 阅读 · 0 评论 -
进程和线程
本文系统性地介绍了进程和线程的核心概念及区别。进程是操作系统资源分配和调度的基本单位,具有独立内存空间和资源集合,包含程序代码、数据段、堆栈区及进程控制块(PCB)。进程上下文切换开销较大,涉及内存管理、权限重建等操作。进程间通信(IPC)包括管道、消息队列、共享内存等多种方式。 线程作为CPU调度和执行的最小单位,共享进程资源但拥有独立栈和寄存器上下文,分为用户级和内核级线程。线程上下文切换仅需保存寄存器状态,开销较小。文章详细对比了进程与线程的特征、组成、上下文管理及通信机制,为理解操作系统并发模型提供原创 2025-07-17 15:47:44 · 924 阅读 · 0 评论 -
synchronized原理
摘要:Java中的synchronized关键字是实现线程同步的重要机制,具有以下特性:1)作为隐式可重入锁,支持锁升级(偏向锁→轻量级锁→重量级锁);2)保证原子性、可见性和有序性;3)使用方法包括方法加锁和同步代码块。底层原理通过monitor对象实现,JDK1.6后优化了锁机制,引入偏向锁、轻量级锁和自适应自旋锁等策略提升性能。此外,JVM会进行锁粗化和锁消除优化。该机制适用于解决多线程并发问题,但需根据具体场景选择合适的同步策略。原创 2020-05-11 00:21:39 · 5397 阅读 · 0 评论 -
java中的Lock锁
本文介绍了Java中的Lock接口及其实现类ReentrantLock和ReadWriteLock。与synchronized关键字相比,Lock提供了更灵活的锁机制,包括可中断锁、公平锁、读写锁等功能。Lock接口包含lock()、tryLock()、lockInterruptibly()等方法,需要手动释放锁。Condition接口配合Lock可实现选择性通知机制。ReadWriteLock通过分离读锁(共享)和写锁(排他)提高并发性能:多个读操作可同时进行,但写操作互斥且优先于读操作。文中通过代码示例原创 2020-07-15 02:42:43 · 19253 阅读 · 5 评论 -
select、poll 和 epoll
摘要:Linux系统中的select、poll和epoll都是I/O多路复用机制,用于高效监控多个文件描述符状态。select通过位图结构实现,但存在1024个文件描述符的限制;poll改用数组结构解决了数量限制,但仍是线性扫描;epoll采用事件驱动模型,通过红黑树和就绪队列实现O(1)时间复杂度,特别适合高并发场景。三者主要区别在于:select/poll需要每次重新传入所有描述符,而epoll只需注册一次;select/poll仅支持水平触发,epoll还支持边沿触发;epoll在性能上优势明显但仅适原创 2025-07-15 20:11:50 · 1010 阅读 · 0 评论 -
python多线程
本文介绍了Python中_thread和threading模块的线程使用方法。_thread模块通过start_new_thread启动线程,但主线程结束会终止子线程,可通过列表记录线程状态实现同步。threading模块提供Thread类创建线程,使用join()方法实现线程等待。文中演示了线程不安全问题(如银行存取款示例),并给出使用Lock互斥锁的解决方案:通过acquire()获取锁,在try-finally中执行共享资源操作后用release()释放锁,确保线程安全。两种模块各具特点,thread原创 2019-09-28 18:18:14 · 309 阅读 · 0 评论