多线程
文章平均质量分 88
爱叨叨的程序狗
码农,不只Coding.
展开
-
Thread的stop和interrupt的区别
方法会导致线程突然终止,可能导致如:线程持有的资源没有被正确释放,使得程序状态不一致问题。因此建议使用更安全的方式来停止线程,比如使用。的维护者,一个跨专业自学Java,对技术保持热爱的bug猿,同样也是在某二线城市打拼四年余的Java Coder。🏆在掘金、CSDN、公众号我将分享我最近学习的内容、踩过的坑以及自己对技术的理解。因为本质上它是不安全的,使用该方法可能会导致数据、资源不一致的问题,👋🏻你好,我是Debug.c。📞如果您对我感兴趣,请联系我。原创 2024-06-01 10:31:07 · 179 阅读 · 0 评论 -
通俗易懂讲乐观锁与悲观锁
假设线程1要使用乐观锁对id为1的数据做修改,在修改前,需要先查询数据数据版本,然后再执行其他逻辑,在执行其他逻辑的期间,该数据可能被其他线程所修改,在下边的案例中修改了对应的数据,此时线程1并不知道其他线程修改了数据,为了判断数据是否被修改,线程1在更新时在where条件中校验数据版本,如果数据被修改过,则version版本不可能为1,因此,可以通过update语句的影响行数判断数据是否被修改。悲观锁在使用时都会把公共资源进行加锁,其他线程处于阻塞状态,性能相较于乐观锁较低,综合以上,原创 2024-06-01 10:30:27 · 871 阅读 · 0 评论 -
通俗易懂讲乐观锁与悲观锁
假设线程1要使用乐观锁对id为1的数据做修改,在修改前,需要先查询数据数据版本,然后再执行其他逻辑,在执行其他逻辑的期间,该数据可能被其他线程所修改,在下边的案例中修改了对应的数据,此时线程1并不知道其他线程修改了数据,为了判断数据是否被修改,线程1在更新时在where条件中校验数据版本,如果数据被修改过,则version版本不可能为1,因此,可以通过update语句的影响行数判断数据是否被修改。悲观锁在使用时都会把公共资源进行加锁,其他线程处于阻塞状态,性能相较于乐观锁较低,综合以上,原创 2024-05-15 22:53:49 · 705 阅读 · 0 评论 -
深入了解ThreadLocal:避免内存泄漏的陷阱与最佳实践
在深入讨论的内存泄漏问题之前,我们先来了解一下的基本概念。是Java中的一个工具类,提供了一种线程级别的数据隔离机制。通过,我们可以在每个线程中存储自己的数据副本,互不影响,从而简化了多线程编程中的共享数据问题。是一个强大的工具,能够在多线程环境中解决共享数据的问题。然而,开发者在使用时应当小心,特别是在长时间存在的线程和线程池等场景下,要注意及时清理,以避免内存泄漏的发生。通过正确的使用习惯和最佳实践,可以更好地发挥的优势,确保多线程环境下的数据安全和性能。原创 2023-12-12 15:37:12 · 991 阅读 · 0 评论 -
深入解析ThreadPoolTaskExecutor的阻塞队列技术选型
是Spring框架中强大的线程池实现,通过合理选择阻塞队列类型,我们可以更好地满足应用程序的需求,提高性能和稳定性。在实际应用中,根据具体场景调整线程池配置,选择适当的阻塞队列,将有助于构建出更为健壮和高效的多线程应用。希望本文对您理解的阻塞队列提供了一些有价值的信息。如果您有任何问题或建议,请随时在评论中分享。原创 2023-12-06 09:54:18 · 759 阅读 · 0 评论 -
深度解析CompletableFuture:Java 异步世界的奇迹
是 Java 8 引入用于支持异步编程和非阻塞操作的类。对于没有使用过通过它这么长的名字就感觉到一头雾水,那么现在我们来一起解读一下它的名字。Completable:可完成Future:未来/将来这两个单词体现了它设计的目的:提供一种可完成的异步计算。result:存储异步计算的结果stack:存储观察者链NEXT:异步调用链中观察者链的管理这三个变量用于Completion类中tryFire方法的标志,表示不同的触发模式。SYNC。原创 2023-11-12 16:25:41 · 227 阅读 · 0 评论 -
优雅的并发编程-CompletableFuture
以上是接口串行执行的逻辑,当前服务器环境一般都是多核心、多线程,服务器可以同时处理多个任务,如果此时还使用单线程去执行,有些“暴殄天物”,并且接口响应速度会比较慢,那么优化的方式就是开启多个线程去分别执行不同的逻辑,那么我们可以使用。单线程和多线程相比,举个不恰当的例子:当你为了报仇,踌躇满志上山叩拜师门,经过十年寒窗苦练、不舍昼夜的练习,终于学成归来下山复仇,结果仇家拿出AK 47一阵突突,云淡风轻的跟你说:“大人,时代变了”的无力感。原创 2023-11-08 21:36:39 · 273 阅读 · 0 评论 -
使用 CountDownLatch 实现多线程协作
在多线程编程中,经常需要实现一种机制来协调多个线程的执行,以确保某些操作在所有线程完成后再进行。CountDownLatch 就是 Java 并发包中提供的一种同步工具,它能够让一个或多个线程等待其他线程完成操作。CountDownLatch 和 CompletableFuture 都是 Java 中用于多线程协作的工具,它们各自适用于不同的场景。CountDownLatch 更适合简单的多线程协作,而 CompletableFuture 则更适合复杂的异步编程场景。原创 2023-11-07 10:46:07 · 168 阅读 · 0 评论 -
共生与共享:线程与进程的关系
在计算机科学和操作系统领域,线程(Thread)和进程(Process)是两个关键概念。它们之间存在密切的关系,但又有着明显的区别。本文将深入探讨线程和进程之间的关系,以及它们在并发编程和资源管理中的作用。进程是操作系统中的基本执行单元,它是一个正在运行的程序的实例。每个进程都有自己的独立内存空间、数据和执行环境。进程之间相互隔离,一个进程的崩溃通常不会影响其他进程的正常运行。进程提供了更高级别的隔离,使得不同进程可以独立运行,互不干扰。线程是进程内的执行单元,一个进程可以包含多个线程。原创 2023-10-12 22:00:08 · 973 阅读 · 0 评论 -
ThreadPoolExecutor线程池实战
ThreadPoolExecutor线程池实战Demo已开源至Github,threadDemo1.配置TreadPoolPropertyThreadPoolTaskExecutor构造方法:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, Time原创 2021-06-06 11:01:41 · 547 阅读 · 0 评论 -
自定义线程池理论知识部分
一、线程池是什么线程池是一种基于池化思想管理线程的工具。创建/销毁是一个耗时操作,频繁使用会降低整体性能,使用线程池维护多个线程,可有效降低运行中性能开销,以及更好的管理线程。Java中自定义线程池是自JDK1.5后出现的ThreadPoolExecutor。 Executor提供了一种思想:将任务提交和任务执行进行解耦,在编码时只需将要执行耗时操作逻辑放入Runanble中即可,无需关心线程调度和执行。ExecutorService提供了扩充执行任务的能力,在执行线程内操作时可以获取执行后的返回原创 2021-06-06 10:58:32 · 157 阅读 · 0 评论 -
ThreadPoolExecutor线程池学习笔记
一、线程池是什么线程池是一种基于池化思想管理线程的工具。创建/销毁是一个耗时操作,频繁使用会降低整体性能,使用线程池维护多个线程,可有效降低运行中性能开销,以及更好的管理线程。Java中自定义线程池是自JDK1.5后出现的ThreadPoolExecutor。 Executor提供了一种思想:将任务提交和任务执行进行解耦,在编码时只需将要执行耗时操作逻辑放入Runanble中即可,无需关心线程调度和执行。ExecutorService提供了扩充执行任务的能力,在执行线程内操作时可以获取执行后的返回原创 2021-06-01 21:44:14 · 108 阅读 · 0 评论 -
如何合理使用线程池?
03.线程池:业务代码最常用也最容易犯错的组件创建线程池要使用手动方式,自动创建线程使用newFixedThreadPool和newCachedThreadPool可能因为资源耗尽导致OOM问题。线程池默认工作行为:不会初始化corePoolSize个线程,有任务来了才创建工作线程当核心线程满了之后不会立即扩容线程池,而是把任务堆积到工作队列中当工作队列满了后扩容线程池,一直到线程个数到maximumPoolSize为止如果队列已满且达到最大线程后还有任务进来,按照拒绝策略处理当线程数大于核原创 2021-05-31 21:56:55 · 232 阅读 · 0 评论