
多线程
文章平均质量分 80
zxfBdd
这个作者很懒,什么都没留下…
展开
-
究竟什么是可重入锁?
经历 很久之前就听说了可重入锁,可重入锁究竟是什么意思,以前是囫囵吞枣的,只要记住ReentrantLock和sychronized是可重入锁就行了,爱咋用咋用,好吧,原谅我的无知,最近对基础查漏补缺,发现竟然对其一问三不知,赶紧预习一波,觉得有必要写一篇博客来讲解,就当做什么都没有发生吧,嘿嘿。。。 释义 广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。ReentrantLock和synchr.转载 2021-03-04 20:52:36 · 184 阅读 · 1 评论 -
CAS机制(多线程)
---- 什么是CAS机制 CAS机制主要是发生于Java中原子操作类(JUC)的底层实现中,其中在CAS机制中包含3个基本参数:内存地址V、旧预期值A、要修改的新值B。 当要更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同的时候,才会将内存地址V对应的值修改为B 举个栗子 在一个内存地址为V内存中,储存着变量值10(即此时A=10) 此时,来了一个线程A,想对该变量进行增加1操作(即此时对线程A来说:A=10,B=11) 但是,当线程A操作之前,被线程B...转载 2020-10-29 19:16:19 · 431 阅读 · 0 评论 -
多线程之CAS
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。 独占锁是一种悲观锁,synchronized就是一种转载 2020-10-29 19:15:33 · 266 阅读 · 0 评论 -
面试官问:高并发下,你都怎么选择最优的线程数?
来源 |http://urlify.cn/YFbMNf 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务。并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行。在高并发的情况下采用线程池,可以有效降低线程创建释放的时间花销及资源开销,如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及“过度切换”(在JVM中采用的处理机制为时间片轮转,减少了线程间的相互切换) 。 但是有一个很大的问题摆在我们面前,即我们希望尽可能多地创建任务,但由于资源所限我们又...转载 2020-10-20 17:34:35 · 203 阅读 · 0 评论 -
Java 多线程之悲观锁与乐观锁
一、悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。 二、乐观锁 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但...转载 2020-10-13 19:10:18 · 111 阅读 · 0 评论 -
Java多线程系列-悲观锁和乐观锁实战
悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。 使用场景举例:以MySQL InnoDB为例 商品goods表中有一个字段status,status为1代表商品未被下单,status为2代表商...转载 2020-10-13 19:09:36 · 589 阅读 · 0 评论