
java多线程
文章平均质量分 60
xzbxzbxz
这个作者很懒,什么都没留下…
展开
-
volatile与CAS的比较
volatile与synchronized的比较Volatile与CAS的比较 参考:https://www.jianshu.com/p/cd4744d799e41)volatile关键字是线程同步的轻量级实现,所以其性能比synchronized好。2)volatile只能修饰变量,synchronized可以修饰方法,代码块3)随着JDK版本升级,synchronized的执行效率有所增加4)多线程访问volatile变量不会发生阻塞,而synchronized可能发生堵塞5)vol...原创 2021-07-11 12:07:30 · 393 阅读 · 0 评论 -
锁相关基础知识
锁之初解读锁将多个线程对共享数据的并发访问转化为串行访问,锁(Lock)就是利用这种思路来保证线程安全锁的持有线程在获得锁之后和释放锁之前这段时间执行的代码成为临界区(Critical Section)锁具有排他性(Exclusive),即一个锁一次只能被一个线程所持有.这种锁被称为排它锁或者互斥锁(Mutex).JVM把锁分为内部锁与显示锁两种.内部锁通过synchronized关键字实现;显示锁是通过java.concurretn.locks.Lock接口的实现类实现的。1.锁的作用锁可以实原创 2021-07-10 22:59:45 · 324 阅读 · 0 评论 -
多线程相关知识之内存屏障
来源:https://www.bilibili.com/video/BV1Rv411y7MU?from=search&seid=9769842728262062596内存屏障硬件层的内存屏障分为两种:Load Barrier 和 Store Barrier即读屏障和写屏障。内存屏障有两个作用:1.阻止屏障两侧的指令重排序;2.强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。在JSR规范中定义了4种内存屏障:LoadLoad屏障:(指令Load1; Loa原创 2021-07-10 22:42:02 · 309 阅读 · 0 评论 -
MESI缓存一致性协议
来源:https://www.bilibili.com/video/BV1Rv411y7MU?from=search&seid=97698427282620625961. MESI缓存一致性协议现代处理器的缓存一般分为三级,由每一个核心独享的L1、L2 Cache,以及所有的核心共享L3 Cache组成,具体每个cache,实际上是有很多缓存行组成:缓存一致性协议给缓存行(通常为64字节)定义了个状态:独占(exclusive)、共享(share)、修改 (modified)、失效(inv原创 2021-07-10 22:39:26 · 235 阅读 · 0 评论 -
Java内存模型(JMM)
来源:https://www.bilibili.com/video/BV1Rv411y7MU?from=search&seid=97698427282620625961.Java内存模型(JMM)下面是对上面JMM的简单介绍:可以将上复杂的JMM抽象为:Java内存模型的简单总结如下:原创 2021-07-10 22:10:21 · 98 阅读 · 0 评论 -
线程安全问题之原子性、可见性、有序性
来源:https://www.bilibili.com/video/BV1Rv411y7MU?from=search&seid=97698427282620625960.三大特性线程安全问题表现为三个方面:原子性、可见性、有序性1. 原子性原子(Atomic)表示不可分割. 原子操作的不可分割有两层含义:1)访问(读、写)某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生,即其他线程得不到当前操作的中间结果(像CAS这种锁,就可以让多个线程同时操作资源,只是在提交的时候原创 2021-07-10 22:03:24 · 799 阅读 · 0 评论 -
Java创建线程 为什么Callable需要FutureTask包装一下?
Java创建线程 为什么Callable需要FutureTask包装一下?1、首先通过Callable接口创建线程的Demo如下://1、定义一个类MyCallable实现Callable接口重写call方法,泛型为返回值类型class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { return 1; }原创 2021-05-27 15:46:58 · 727 阅读 · 0 评论 -
Java 常用线程池
Java 常用线程池1.Executor、ExecutorService、ScheduledExecutorService、ScheduledThreadPoolExecutor、ThreadPoolExecutor、Executors的关系关系说明: 1. Executor是顶级接口,但是它只是执行线程的工具而不是线程池,定义了一个无返回值的execute方法; 2. ExecutorService接口继承了Executor,是真正的线程池接口 3. Sc原创 2021-05-21 10:19:35 · 164 阅读 · 0 评论