多线程
慕沐.
这个作者很懒,什么都没留下…
展开
-
【并发】实现分布式锁的三种方式(主推Redisson)
可重入锁 // 普通用法 rLock.lock(); // 支持过期解锁功能,5秒钟以后自动解锁, 无需调用unlock方法手动解锁 rLock.lock(5, TimeUnit.SECONDS); // 尝试加锁,最多等5秒,上锁以后10秒自动解锁 rLock.tryLock(5,10,TimeUnit.SECONDS);...原创 2020-08-09 21:38:16 · 349 阅读 · 0 评论 -
【多线程】线程池里边都有些什么东西呢
使⽤线程池的原因:1、降低资源消耗创建/销毁线程需要消耗系统资源,线程池可以复⽤已创建的线程。2、控制并发的数量。并发数量过多,可能会导致资源消耗过多,从⽽造成服务器崩溃。(主要原因)3、可以对线程做统⼀管理。线程池的类ThreadPoolExecutor线程池顶层接⼝是 Executor 接⼝, ThreadPoolExecutor 是这个接⼝的实现类类ThreadPoolExecutor 的构造函数中参数1、int corePoolSize:该线程池中核⼼线程数最⼤值核⼼线程默认情况原创 2020-07-13 10:30:00 · 554 阅读 · 0 评论 -
【多线程】常常听到的CAS是什么呢,有什么作用呢
CAS,全称是Compare And Swap,是比较并交换的意思CAS是⼀种原⼦操作,它是⼀种系统原语,是⼀条CPU的原⼦指令,从CPU层⾯保证它的原⼦性1、CAS的过程V:要更新的变量(var)E:预期值(expected)——本质上指的是“旧值”N:新值(new)判断V是否等于E,如果等于,将V的值设置为N;如果不等,说明已经有其它线程更新了V,则当前线程放弃更新,什么都不做。当多个线程同时使⽤CAS操作⼀个变量时,只有⼀个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是原创 2020-07-11 11:27:18 · 1893 阅读 · 1 评论 -
【多线程】线程获取共享资源时的无锁、偏向锁、轻量级锁、重量级锁,以及它们是如何升级的呢?
锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级也可以降级,不过降级的条件特别苛刻,当JVM进入安全点(SafePoint) 的时候, 会检查是否有闲置的Monitor, 然后试图进行降级。1、⽆锁状态⽆锁就是没有对资源进⾏锁定,任何线程都可以尝试去修改它2、偏向锁状态偏向锁会偏向于第⼀个访问锁的线程,如果在接下来的运⾏过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。偏向锁在资源⽆竞争情况原创 2020-07-05 08:44:40 · 380 阅读 · 0 评论 -
【多线程】结合例子理解happens-before含义以及其规则
Happens-Before 并不是说前面一个操作发生在后续操作的前面, 它真正要表达的是: 前面一个操作的结果对后续操作是可见的。一、理解happens-before1、如果⼀个操作happens-before另⼀个操作,那么第⼀个操作的执⾏结果将对第⼆个操作可⻅,⽽且第⼀个操作的执⾏顺序排在第⼆个操作之前。2、两个操作之间存在happens-before关系,并不意味着Java平台的具体实现必须要按照happens-before关系指定的顺序来执⾏。如果重排序之后的执⾏结果,与按happens-b原创 2020-06-28 10:42:10 · 619 阅读 · 0 评论 -
【多线程】Java中的volatile到底起着什么样的作用呢
1、可见性指的是一个线程修改一个共享变量时,另一个线程可以读到这个修改的值。是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的每个线程在执行的时候,会从主内存中拷贝一份到自己的本地内存对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。2、不可重排序JVM通过内存屏障来实现限制处理器的重排序内存屏障分两种:读屏障(Load Barrier)和写屏障(Store Barrier)内存屏障有两个作⽤:(1) 阻⽌屏障两侧的指令重排序;(2)强原创 2020-06-27 21:28:42 · 626 阅读 · 0 评论 -
【多线程】Java线程间是如何通信的呢?
一、同步 synchronized共享内存机制线程同步是线程之间按照⼀定的顺序执⾏,可以使⽤锁来实现达到线程同步,也就是在需要同步的代码块里加上关键字synchronized 。二、信号量共享内存机制基于 volatile 关键字来实现的volitile关键字能够保证内存的可⻅性,如果⽤volitile关键字声明了⼀个变量,在⼀个线程⾥⾯改变了这个变量的值,那其它线程是⽴⻢可⻅更改后的值的。三、等待/通知机制(wait/notify)基于Object 类的 wait() ⽅法和 notify原创 2020-06-24 21:33:59 · 1997 阅读 · 0 评论