
多线程
文章平均质量分 95
氵奄不死的鱼
日拱一卒,功不唐捐
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何合理配置一个线程池
如何来设置呢?需要根据几个值来决定tasks :每秒的任务数,假设为500~1000taskcost:每个任务花费时间,假设为0.1sresponsetime:系统允许容忍的最大响应时间,假设为1s做几个计算corePoolSize = 每秒需要多少个线程处理?转载 2023-02-03 13:56:08 · 1337 阅读 · 0 评论 -
ThreadLocal分析
每个线程都会有属于自己的本地内存,在堆中的变量在被线程使用的时候会被复制一个副本线程的本地内存中,当线程修改了共享变量之后就会通过JMM管理控制写会到主内存中。很明显,在多线程的场景下,当有多个线程对共享变量进行修改的时候,就会出现线程安全问题,即数据不一致问题。常用的解决方法是对访问共享变量的代码加锁(synchronized或者Lock)。但是这种方式对性能的耗费比较大。ThreadLocal意为,用于解决多线程并发时访问共享变量的问题。原创 2022-12-08 21:51:53 · 254 阅读 · 0 评论 -
Java中CAS详解
CAS机制是一种数据更新的方式。在具体讲什么是CAS机制之前,我们先来聊下在多线程环境下,对共享变量进行数据更新的两种模式:悲观锁模式和乐观锁模式。悲观锁更新的方式认为:在更新数据的时候大概率会有其他线程去争夺共享资源,所以悲观锁的做法是:第一个获取资源的线程会将资源锁定起来,其他没争夺到资源的线程只能进入阻塞队列,等第一个获取资源的线程释放锁之后,这些线程才能有机会重新争夺资源。synchronized就是java中悲观锁的典型实现,synchronized使用起来非常简单方便,但是会使没争抢到资源的线原创 2022-12-06 22:17:17 · 2097 阅读 · 1 评论 -
到底什么才是线程安全
转 原文 https://www.cnblogs.com/dolphin0520/p/3920373.html内存模型大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有转载 2021-11-08 20:43:04 · 291 阅读 · 0 评论 -
java AQS
aqs指的是juc下面的AbstractQueuedSynchronizer,是线程同步的一种方式,保证线程安全。AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。java.util.concurrent.locks.ReentrantLock#lock先来看以看这个sync是什么来头顶层接口AbstractOwnableSynchronizer看原创 2021-11-08 20:44:51 · 462 阅读 · 0 评论 -
线程池详解
什么是线程池在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就是”池化资源”技术产生的原因。线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。Java原创 2021-11-11 14:49:49 · 1981 阅读 · 0 评论 -
CompletableFuture
CompletionStage定义了一组接口用于在一个阶段执行结束之后,要么继续执行下一个阶段,要么对结果进行转换产生新的结果等等,一般来说要执行下一个阶段都需要上一个阶段正常完成,当然这个类也提供了对异常结果的处理接口。CompletionStage只定义了一组基本的接口,其实现类还可据此扩展出更丰富的方法。原创 2022-08-24 21:59:49 · 318 阅读 · 0 评论