3 不一样的花朵

尚未进行身份认证

只要学不死,就往死里学.别人可以在智商上面压制自己,但是绝对不能在学习时间上面压制自己.

等级
TA的排名 5w+

并发编程之J.U.C的第二篇

并发编程之J.U.C的第二篇3.2 StampedLock3.2 StampedLock该类自JDK8加入,是为了进一步优化读性能,它的特点是使用读锁、写锁时都必须配合【戳】使用加解读锁加锁写锁乐观锁,StampedLock 支持 tryOptimisticRead()方法(乐观读),读取完毕后需要做一次戳校验,如果校验通过,表示这期间确实没有写操作,数据可以安全使用,如果校验没通过...

2020-02-25 11:41:47

并发编程之J.U.C的第一篇

并发编程之J.U.CAQS 原理AQS 原理全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架特点 :用state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetStat...

2020-02-22 15:42:51

并发编程之线程池

并发编程之线程池4. 自定义线程池ThreadPoolExecutor4. 自定义线程池步骤1 :自定义拒绝策略接口ThreadPoolExecutor1)线程池状态ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING这...

2020-02-20 09:02:36

并发编程之共享模型的不可变

并发编程之共享模型的不可变7.2 不可变设计享元模式2. 体现2.1 包装类final原理1.设置final变量的原理7.2 不可变设计final的使用发现该类、类中所有属性都是final的属性用final修饰保证了该属性是只读的,不能修改类用final修饰保证了该类中的方法不能被覆盖,防止子类无意间破坏不可变性保护性拷贝使用字符串时,也有一些跟修改相关的方法,比如substri...

2020-02-17 11:48:56

并发编程之无锁

并发编程之无锁6.2 CAS与volatile6.2 CAS与volatile其中的关键是compareAndSet,它的简称就是CAS(也有Compare And Swap的说法),它必须是原子操作。注意其实CAS的底层是lock cmpxchg指令(X86架构),在单核CPU和多核CPU下都能够保证【比较-交换】的原子性。在多核状态下,某个核执行到带lock的指令时,CPU会让...

2020-02-16 20:35:26

并发编程之Java内存模型

并发编程之Java内存模型5.1 Java内存模型5.2 可见性5.1 Java内存模型JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受cput缓存的影响有序性 - 保证指令不会受cpu指令并行优化的影...

2020-02-15 09:40:58

并发编程之第四篇

并发编程之第四篇4.11 多把锁4.12 活跃性饥饿4.13 ReentrantLock4.11 多把锁一间大屋子有两个功能 : 睡觉、学习、互不相干现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低解决方法时准备多个房间(多个对象锁)4.12 活跃性死锁有这样的情况 : 一个线程需要同时获取多把锁,这时就容易发生死锁t1 线程获得A对象锁,接下来想...

2020-02-13 08:15:17

并发编程之第三篇(synchronized)

并发编程之第三篇(synchronized)3. 自旋优化4. 偏向锁撤销-其它线程使用对象撤销-调用wait/notify批量重偏向批量撤销5. 锁消除4.7 wait/notifyAPI介绍3. 自旋优化重量级锁竞争的时候,还可以使用自旋来进行优化,如果当前线程自旋成功(即这时候持锁线程已经退出了同步块,释放了锁),这时当前线程就可以避免阻塞。自旋重试成功的情况自旋重试失败的情况...

2020-02-10 11:17:29

并发编程之线程第二篇

3.12 五种状态这是从操作系统层面来描述的【初始状态】仅是在语音层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由CPU调度执行【运行状态】指获取了CPU时间片运行中的状态(1)当CPU时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换【阻塞状态】(1)如果调用了阻塞API,如BIO读写文件...

2020-02-08 22:05:43

并发编程之线程第一篇

3.4 原理之线程运行Java虚拟机栈JVM中由堆、栈、方法区所组成,其中栈内存是给线程使用,每个线程启动后,虚拟机就会为其分配一块栈内存。每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法线程上下文切换(Thread Context Switch)因为以下一些原因导致cpu不再执行当前的线程,转而执行另一个...

2020-02-07 20:21:04

并发编程之进程与线程

并发编程之进程与线程2.1 线程与进程2.1.1 进程2.1.2 线程2.1.3 二者对比2.2 并行与并发2.3 应用2.1 线程与进程2.1.1 进程程序指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就...

2020-02-06 11:35:29

图解Java设计模式之设计模式七大原则

图解Java设计模式之设计模式七大原则2.1 设计模式的目的2.2 设计模式七大原则2.3 单一职责原则2.3.1 基本介绍2.3.2 应用实例2.1 设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件)。具有更好1)代码重用性(即:相同功能的代码,不用多次编写)2)可读性(即:编程规范性,便于其他程...

2020-01-29 12:56:59

Java每日一题之常用的MySQL复制架构有哪些?

Java每日一题之常用的MySQL复制架构有哪些?参考答案 :(1)一主多从在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量对实时性要求不是特别高的读请求通过负载均衡分布到多个从库上,降低主库的读取压力,在主库出现异常宕机的情况下,可以把一个从库切换为主库继续提供服务。经常用在读写操作不频繁,查询量比较大的业务环境中。(2)多级复制一主多从的架构能够解决...

2020-01-13 17:34:58

Java每日一题之为什么HashMap中数组的容量为2的次幂?

Java每日一题之为什么HashMap中数组的容量为2的次幂?参考答案 :因为在插入元素时,元素定位的数组位置时把hashCode和容量进行按位与计算。使得2的次幂进行计算时可以减少碰撞的发生,并且让散列尽可能的均匀分布。...

2020-01-13 17:11:23

Java每日一题之当某个服务接口并发量扛不住时,你第一反应是什么方案?为什么?

Java每日一题之当某个服务接口并发量扛不住时,你第一反应是什么方案?为什么?参考答案 :缓存方案/静态化方案,它能轻松百倍提升吞吐量,效果最明显。...

2020-01-13 17:07:08

Java每日一题之Redis有慢查询吗?如何解决?

Java每日一题之Redis有慢查询吗?如何解决?答案 :有,当查询的实际超过系统设置的最大值时,会被记录到慢查询队列,解决方法一般将value值变小,即将KEY拆分成多KEY存储,类似分库分表操作。...

2020-01-13 17:04:50

Java每日一题之如何使用Redis完成高性能的全局订单号生成?

Java每日一题之如何使用Redis完成高性能的全局订单号生成?答案 :使用incrby一次性批量生成订单号,并存储到web缓存,下次直接从缓存拿,减少与Redis交互。...

2020-01-13 16:59:50

Java每日一题之MyBatis是怎么通过mapper接口访问数据库?

Java每日一题之MyBatis是怎么通过mapper接口访问数据库?参考答案 :mybatis是通过sqlSession这个入口才能访问数据库;首先通过动态代理在内存中生成mapper接口的实现类,实现类中的方法要做三个翻译,第一将请求转发给sqlSession中指定的方法,第二拼接sql语句的唯一标识(nameSpace + id),第三传递查询参数;通过这三步翻译,基于sqlSessio...

2020-01-13 16:53:55

Java每日一题之Thread的yield和join方法区别

Java每日一题之Thread的yield和join方法区别1.Java线程调度的一点背景2.理解线程的优先权3.yield()方法4.join()方法1.Java线程调度的一点背景在各种各样的线程中,Java虚拟机必须实现一个有优先权的、基于优先级的调度程序。这意味着Java程序中的每一个线程被分配到一个优先权,使用定义好的范围内的一个正整数表示。优先级可以被开发者改变。即使线程已经运行了一...

2020-01-13 16:47:47

Java每日一题之Netty高性能表现在那些方面?

Java每日一题之Netty高性能表现在那些方面?答案 :(1) IO线程模型 :同步非阻塞,用最少的资源做更多的事情。(2) 内存零拷贝 :尽量减少不必要的内存拷贝,实现了更高效率的传输。(3) 内存池设计 :申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。(4) 串行化处理读写 :避免使用锁带来的性能开销。即消息的处理尽可能再同一个线程内完成,期间不进...

2020-01-13 15:23:56

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。