多线程
HybridTheory_
这个作者很懒,什么都没留下…
展开
-
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价 锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态...原创 2019-03-24 18:59:24 · 168 阅读 · 0 评论 -
synchronized 关键字原理
众所周知synchronized关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前Class对象。 同步块,锁的是()中的对象。 实现原理:JVM是通过进入、退出对象监视器(Monitor)来实现对方法、同步块的同步的。 具体实现是在编译之后在同步方法调用前加入一个monitor.enter指令,在退出方...原创 2019-03-24 19:35:33 · 142 阅读 · 0 评论 -
HashMap、ConcurrentHashMap 原理分析
前言 Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap 众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具...原创 2019-03-24 20:33:57 · 130 阅读 · 0 评论 -
线程池原理
前言 平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条: 可见线程池的重要性。 简单来说使用线程池有以下几个目的: 线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。 线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个...原创 2019-03-25 15:48:20 · 167 阅读 · 0 评论