多线程/并发
文章平均质量分 80
东纪元
这个作者很懒,什么都没留下…
展开
-
java jvm volatile与内存屏障
内存屏障(Memory barrier)为什么会有内存屏障每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的手段并不是一样,java通过屏蔽这些差异,统一由jvm来生成内存屏障转载 2020-09-08 23:51:42 · 626 阅读 · 0 评论 -
transmittable-thread-local源码分析
转载自:https://www.jianshu.com/p/82e737057221前言ThreadLocal解决了在多个线程针对一个变量维护不同值的功能,如果你想在同一个线程内传递一些值,那么就可以用到这个类,它的好处是无侵入性,这样我们就不需要再每个方法内透传这个参数,比如Dubbo的RpcContext。另外我们也可以利用这个类来解决在多线程情况下使用线程不安全的类的问题,比如SimpleDateFormat。ThreadLocal的子类InheritableThreadLocal在Th.转载 2020-08-20 16:52:42 · 628 阅读 · 0 评论 -
java 多线程面试复习
https://blog.csdn.net/qq_35190492/article/details/104691668?depth_1-utm_source=distribute.pc_feed.none-task&request_id=&utm_source=distribute.pc_feed.none-task转载 2020-03-09 22:47:37 · 141 阅读 · 0 评论 -
ReentrantLock是如何实现与synchronized一样的语义?比如在不使用volatile修饰变量是如何保证该变量的可见性的?
在复习《深入理解java虚拟机》的时候想到这个问题的。因为学习多线程的时候我记得synchronized包含的代码块中所用到的共享变量是不需要加volatile修饰的,synchronized本身就保证了代码块所访问的共享变量的可见性。。。这是java本身底层所支持的特性。。然后就产生了一个ReentrantLock的疑问:先简单描述一下ReentrantLock是由java代码...原创 2020-01-02 14:18:00 · 569 阅读 · 0 评论 -
java 多线程 volatile 与 synchronized
https://www.cnblogs.com/hapjin/p/5492880.html三,volatile 与 synchronized 的比较volatile主要用在多个线程感知实例变量被更改了场合,从而使得各个线程获得最新的值。它强制线程每次从主内存中讲到变量,而不是从线程的私有内存中读取变量,从而保证了数据的可见性。关于synchronized,可参考:JAVA多线程之...原创 2019-12-23 09:34:34 · 152 阅读 · 0 评论 -
多线程:并行与并发的区别
一、并行是对于cpu多个核心来说的。并行指的在同一时刻有多个任务一起执行。注意,是同一时刻。一个cpu核心在同一时刻只能执行一个线程的任务,所以一个cpu核心是无法在同一时刻执行多个任务的。所以要同一时刻执行多个任务,这些任务只有被分配到不同的cpu核心上,然后多个核心分别在同一时刻一起执行这些任务。。那么这些任务线程才能叫做是并行执行。二、并发是对于cpu单个核心来说的。上面...原创 2019-12-01 01:01:18 · 1623 阅读 · 0 评论 -
ThreadPoolExecutor参数的理解
https://blog.csdn.net/zhongxiangbo/article/details/70882342转载 2019-07-26 09:57:33 · 181 阅读 · 0 评论 -
利用Zookeeper实现分布式共享锁与排它锁
https://blog.csdn.net/zhutulang/article/details/77429851https://www.cnblogs.com/coshaho/p/6995558.html转载 2019-06-29 22:32:48 · 511 阅读 · 0 评论 -
java 线程池
http://www.tianxiaobo.com/2018/04/17/Java-%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90/https://dongxuan.iteye.com/blog/901689转载 2019-07-04 15:05:18 · 302 阅读 · 1 评论 -
ReentrantLock公平锁与非公平锁
下面是高洪岩的java多线程编程书中原文。下面这段话转载自https://blog.csdn.net/rickiyeat/article/details/78307739前言 最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是AbstractQ...转载 2019-01-30 14:26:23 · 142 阅读 · 0 评论 -
Thread各方法介绍
join():阻塞当前父线程,直到调用join方法的子线程执行结束才会重新唤醒父线程(子线程对象调用该方法之前需要先start启动子线程,否则该方法无用)join(long):阻塞当前父线程,阻塞时间为参数指定的毫秒数,阻塞时间到达之后自动唤醒父线程,也就是说要么调用join方法的子线程执行结束或者要么子线程执行时间超过指定时间,否则父线程一直被阻塞(子线程对象调用该方法之前需要先start启...原创 2019-01-29 14:58:53 · 398 阅读 · 0 评论 -
wait方法各种重载
wait():无参的,永久阻塞当前线程,直到被唤醒。wait(long):阻塞当前线程,阻塞时间为参数所指定的毫秒,超过这个时间后该线程自动醒过来,并且在阻塞期间也可以被中途唤醒。...原创 2019-01-29 11:28:03 · 811 阅读 · 0 评论 -
CAS的ABA问题,ABA问题会导致什么后果?
ABA问题会导致什么后果?(以下为转载)https://blog.csdn.net/wufaliang003/article/details/78797203一、并发业务场景库存业务,stock(sid, num),其中:sid为库存idnum为库存值如上图所示,两个并发的查询库存操作,同时从数据库都得到了库存是5。接下来用户发生了并发的库存扣减动作:...原创 2019-01-16 10:10:07 · 14752 阅读 · 5 评论 -
什么是CAS?
什么是CAS?在计算机科学中,比较和交换(Compare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称...转载 2019-01-16 10:09:24 · 248 阅读 · 0 评论 -
什么是CAS?CAS的ABA问题,ABA问题会导致什么后果?
什么是CAS?在计算机科学中,比较和交换(Compare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称...转载 2019-01-16 10:08:56 · 9141 阅读 · 10 评论 -
java 多线程 synchronized与Object类中wait、notify、notifyAll方法的使用
synchronized的使用:(1)synchronized(obj){}的使用obj是一个实例对象,可以是任意对象,当在多线程中通过各种方式执行到该synchronized包围的代码段,需要先拿到obj对象的锁才能继续往后执行,否则就阻塞,阻塞的时候一直判断有没有拿到obj的锁,如果拿到obj的锁了,就可以继续执行,如果还没拿到obj的锁,继续阻塞。(2)synchronized用...原创 2018-07-12 14:05:41 · 1342 阅读 · 0 评论