![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
吗达拉
这个作者很懒,什么都没留下…
展开
-
自旋锁
自旋锁spinlock:指尝试获取锁的线程不会立即阻塞,而是菜用循环的方式去获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗cpu。 例如前面说的CAS,就是一个自旋锁。手写自旋锁:结果如下:...原创 2020-01-02 17:27:34 · 176 阅读 · 1 评论 -
公平锁与非公平锁
一,公平锁和非公平锁公平锁:指多个线程按照申请锁的顺序来获取锁,先来后到非公平锁:多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转活着饥饿现象java ReentrantLock而言,默认是公平锁。传true是公平锁,非公平锁的优点在于吞吐量比公平锁要大syncronized是一种非公平锁二,可重入锁:又名递...原创 2020-01-02 16:08:21 · 697 阅读 · 1 评论 -
集合类不安全之HashMap并发修改异常
一,故障现象java.util…ConcurrentModificationException并发修改异常二,解决方案① new ConcurrentHashMap<>();②Collections.syncronizedMap(new HashMap())与前面体系一样...原创 2020-01-02 15:11:34 · 793 阅读 · 0 评论 -
集合类不安全之HashSet并发修改异常
一,故障现象java.util.ConcurrentModificationException并发修改异常多线程并发操作ArrayList时,争抢修改,导致的异常二,解决方案①Collections.syncronizedSet(new HashSet<>()).②new CopyOnWriteArraySet<>();它的底层还是CopyOnWriteArray...原创 2020-01-02 15:06:49 · 579 阅读 · 1 评论 -
集合类不安全之ArrayList并发修改异常
一,故障现象多线程并发操作ArrayList.java.util.ConcurrentModificationException并发修改异常二,导致原因多线程并发操作ArrayList时,争抢修改,导致的异常三,解决方案①new vector,底层syncronized。但是并发性严重下降②Collections.syncronizedList(new ArrayList<&...原创 2020-01-01 15:34:53 · 516 阅读 · 0 评论 -
谈谈对volatile的理解
volatile是java虚拟机提供的轻量级的同步机制1,保证可见性JMM:Java Memory Model,本身是一种抽象的概念并不真实存在,它描述的是一组规范或规则。通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式JMM:关于同步的规定①线程解锁前,必须把共享变量的值刷新回主内存②线程加锁前,必须读取主内存的最新值到自己的工作内存③加锁解锁...原创 2019-12-28 15:32:40 · 140 阅读 · 0 评论 -
HashMap与ConcurrentHashMap
HashMap底层是基于“数组+链表”组成,不过在1.7和1.8中具体实现稍有不同一,HashMap中比较核心的几个成员变量:给定的默认容量是16,负载因子是0.75.map在使用过程中不断往里面存放数据,当数据达到了12,就进行扩容一般是乘2变成32.这个过程涉及到rehash,复制数据等操作所以比较消耗性能,因此通常建议提前预估HashMap的大小通过上图我们发现,真正存放数据的是t...原创 2019-06-21 18:48:19 · 152 阅读 · 1 评论 -
手写一个死锁
/** * Created by Liutao on 2019/6/21 16:51 * 如何避免和解决死锁问题 * 1,按顺序加锁,例如本文的例子 * 2,获取时间锁,每个获取锁的时候加上个时限,如果超过某个时间就放弃获取锁 * 3,死锁检测 * 按照线程获取锁的关系检测线程间是否发生死锁,若发生就中断或者回滚操作 */public class DeadLock { pr...原创 2019-06-21 17:27:27 · 305 阅读 · 0 评论 -
Spring
1,Spring的加载流程初始化环境->加载配置文件->实例化Bean->调用Bean显示信息2,Spring AOP的实现原理AOP,面向切面编程,是OOP的补充和完善,OOP引入了封装,继承,堕胎性等建立一种对象层次结构(从上到下的关系),当需要为分散的对象引入公共行为的时候(从左到右的关系),OOP就显得无能为力。例如:日志功能,安全性,异常处理等,它们散布在所有对象...原创 2019-06-10 11:41:02 · 106 阅读 · 0 评论 -
JVM知识
1,什么情况下会发生栈内存溢出。栈是线程私有的,它的生命周期和线程相同,每个方法在执行的时候都会创建一个栈帧用来储存局部变量表,操作数栈,动态链接,方法出口灯信息。所以我们可以理解为栈溢出就是,方法执行是创建的栈帧超过了栈的深度。最有可能的就是方法递归调用,会产生这种结果...原创 2019-06-03 15:48:32 · 74 阅读 · 0 评论 -
异常
Error:Error类对象由java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。Exception:在Exception分支中有一个重要的子类RuntimeException(运行时异常),该类型的异常自动为你所编写的程序。ArrayIndexOutOfBoundsException(数组下标越界)、NullPointerException(空指针异常)、ArithmeticE...原创 2019-05-31 16:26:27 · 153 阅读 · 0 评论 -
单例模式
1什么是单例模式:单例模式就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类单例模式有三种:①懒汉式模式//懒汉式单例public class SingleTon { private static SingleTon singleTon; private SingleTon(){} public sta...原创 2019-05-31 14:46:48 · 96 阅读 · 0 评论 -
IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型。
1.什么是BIO,NIO,AIOJAVA BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程并处理,如果这个连接不做任何事情会造成不必要的开销,当然可以通过线程池机制改善JAVA NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理JAVA ...原创 2019-05-30 16:56:00 · 6677 阅读 · 0 评论 -
1_java基础
1.JAVA中的几种基本数据类型是什么,各自占用多少字节bit:位:计算机存储数据的的最小单位,二进制数中的一个位数,其值为0或1byte:字节 1 byte=8bit基本数据类型:byte 1个字节short 2个字节int 4个字节long 8个字节float 4字节double 8字节char 2字节...原创 2019-05-24 17:39:09 · 95 阅读 · 0 评论