java
文章平均质量分 77
无忧少年
只想当一个无忧无虑的少年
展开
-
原子操作类
原子操作类@author 无忧少年@createTime 2021-03-301.原子更新基本类型AutomicBoolean 原子更新布尔类型AtomicInteger 原子更新整型AtomicLong 原子更新长整型这三个类的用法几乎一模一样,接下来就以AtomicInteger 为例讲解一下int addAndGet(int delta): 以原子方式将输入的树枝与实例中的值相加并且返回结果。boolean compareAndSet(int expect, int upd转载 2021-08-07 15:03:49 · 303 阅读 · 0 评论 -
Map接口源码解析
Map接口源码解析@author 无忧少年@createTime 2020/06/10public interface Map<K,V> { //同样的,如果size超过Integer.MAX_VALUE也只会返回Integer.MAX_VALUE int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(O原创 2021-08-07 15:02:38 · 132 阅读 · 0 评论 -
ConcurrentLinkedQueue源码详解
ConcurrentLinkedQueue详解@author 无忧少年@createTime 2021/03/08ConcurrentLinkedQueue介绍 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,下面我们一起来研究下Doug Lea是如何使用原创 2021-08-07 15:01:46 · 439 阅读 · 0 评论 -
ConcurrentHashMap源码解析
文章目录ConcurrentHashMap1. ConcurrentHashMap和HashMap、HashTable之间的区别2. ConcurrentHashMap的结构ConcurrentHashMap在JDK1.8中和HashMap结构大同小异,下面介绍一下ConcurrentHashMap的基本属性3. put方法4. get 方法5.size方法ConcurrentHashMap@author 无忧少年@createTime 2021/03/071. ConcurrentHa原创 2021-08-07 15:00:08 · 84 阅读 · 0 评论 -
LinkList源码解析
LinkList源码解析@auther 无忧少年@creatTime 2020/07/16一、前言 这次我们来看一下常见的List中的第二个——LinkedList,在前面分析ArrayList的时候,我们提到,LinkedList是链表的结构,其实它跟我们在分析map的时候讲到的LinkedHashMap的结构有一定的相似,但是相对简单很多,今天再详细的看一下它的具体结构,以及使用的场景等。二、LinkedList结构概览在看具体的结构之前我们先来看一下它的继承关系:与Array原创 2021-08-07 14:58:52 · 231 阅读 · 0 评论 -
ArrayList源码解析
ArrayList源码解析@auther 无忧少年@creatTime 2020/07/10一、ArrayList结构 顾名思义,ArrayList的结构实际就是一个Object[]。所以它的特性很明显,插入一个元素的时候,是耗时是一个常量时间O(1),在插入n个元素的时候,需要的时间就是O(n)。其他的操作中,运行的时间也是一个线性的增长(与数组中的元素个数有关)。二、ArrayList源码解析2.1 ArrayList类的继承关系其中值得一提的是RandomAccess接口,原创 2021-08-07 14:57:26 · 87 阅读 · 0 评论 -
AQS简介
AQS@author lisiwen@createTime 2020/09/221.AQS简介AQS是AbstractQueuedSynchronizer的简称,即抽象队列同步器,从字面意思上理解:抽象:抽象类,只实现一些主要逻辑,有些方法由子类实现;队列:使用先进先出(FIFO)队列存储数据;同步:实现了同步的功能。那AQS有什么用呢?AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的同步器,比如我们提到的ReentrantLock,Semaphore,原创 2020-09-27 08:20:58 · 312 阅读 · 0 评论 -
volatile关键字
volatile@author lisiwen@createTime 2020/09/251 几个基本概念在介绍volatile之前,我们先回顾及介绍几个基本的概念。1.1 内存可见性在Java内存模型那一章我们介绍了JMM有一个主内存,每个线程有自己私有的工作内存,工作内存中保存了一些变量在主内存的拷贝。内存可见性,指的是线程之间的可见性,当一个线程修改了共享变量时,另一个线程可以读取到这个修改后的值。1.2 重排序为优化程序性能,对原有的指令执行顺序进行优化重新排序。重排序可能发生原创 2020-09-25 09:52:35 · 285 阅读 · 0 评论 -
多线程间的通信
线程间的通信@author lisiwen@createTime 2020/08/261.锁与同步 在java中锁的概念都是基于对象的,所以我们通常又称它为对象锁,锁与线程的关系就是一个锁只能在同一时间被一个线程拥有,其他线程需要等待锁呗释放,只有当当前线程释放了锁,其他线程才能拥有这个锁。 在线程之间也有一个同步的概念,解释一下同步的概念,同步概念就仿佛是A和B抄大佬作业的时候,如果突然大佬说他作业有答案错了,需要改几道题的答案,这时候可能就会导致A和B抄出来的作业是不一致的,为了A原创 2020-09-15 15:19:17 · 119 阅读 · 0 评论 -
Netty 入门学习
文章目录Netty 入门学习1. 认识Netty1.1. 什么是Netty1.2. Netty特点1.3.Netty和Tomcat有什么区别?2. Netty核心组件2.1.Bootstrap 和 ServerBootstrap2.2. Channel2.3. 回调2.4. Future2.5.ChannelHandler2.6. EventLoop3.项目代码示例3.1.服务端部分3.2.客户端部分3.3.编码解码器部分3.4.传输对象部分3.5.项目启动结果Netty 入门学习@author li原创 2020-09-15 14:22:05 · 303 阅读 · 0 评论 -
一、并发编程入门
并发编程入门@author lisiwen@createTime 2020/07/221.上下文切换 单核处理器也是支持多线程执行代码,因为cpu通过给每个线程分配cpu时间片来实现这个机制,时间片是cpu分配给各个线程的时间,因为时间片特别短,所以cpu通过不停切换线程执行,让我们感觉很多线程是同时执行的,时间片一般是十几毫秒(ms)。 CPU通过时间片分配算法循环执行任务,当前任务执行一个时间片后会却换到写一个任务,但是,在切换之前会保存上一个任务的状态,以便下一次切换回这个任务时原创 2020-07-27 09:31:15 · 128 阅读 · 0 评论 -
多线程简单使用
多线程简单使用@author 李思文@createTime 2020/07/161.前言 最近在学习过程中,或多或少接触到很多关于多线程的知识,目前我在项目上接触的也比较少,所以此次特殊学习一下。## 2.什么是线程 要说线程,首先要说一下进程,对于进程的理解可以打开电脑的任务管理器,如下图 每一个开启程序均为一个进程,而一个进程可以有至少一个线程,就比如说qq的话,打开一个QQ属于开启一个进程,而qq可以同时和很多人聊天,也可以和A聊天同时和B视频,这个就是两个线程,如下图原创 2020-07-16 18:11:12 · 177 阅读 · 0 评论 -
HashMap源码分析
HashMap源码分析@author lisiwen@createTime 2020/06/101. HashMap类的继承关系 可以看到HashMap继承自AbstractMap,实现了Serializable和Cloneable。这里介绍AbstractMap的源码,因为阅读之后发现比较简单,有兴趣的可以自行去看看,其中的keyset()和values()方法与HashMap中的类似。Serializable接口表示HashMap实现了的序列化,Cloneable接口表示可以合法的调用原创 2020-06-29 09:21:16 · 114 阅读 · 0 评论 -
基于springboot的脚手架
基于springboot的框架@autohr lisiwen@createTime 2020/05/14最近因公司新接手了一个新项目,业务和之前完全不同,我这索性新搭建了一套我们服务的简单的框架,使用的是springboot 2.1 集成了mybatis-plus、redis、拦截器、swagger、阿里的Druid、全局异常处理等,项目结构大概如下:使用的是多模块的结构,直接上传到公司maven私服的,以供新服务使用。接下来有时间就会介绍这套架构。...原创 2020-05-14 09:11:31 · 391 阅读 · 0 评论 -
springboot使用MQ
springboot使用MQ@author 李思文@company 博思软件@createdTime 2020/2/21现在pom文件中加入依赖<!-- MQ依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri...原创 2020-02-24 09:17:44 · 4133 阅读 · 0 评论 -
使用自定义注解和@Aspect实现操作日志记录
使用自定义注解实现操作日志记录@author lisiwen@createTime 2020/2/5 在项目中需要对于指定操作进行日志的记录,在我们有的项目中是对于异常时对日志数据进行记录,有的项目是对所有数据进行日志记录。可以使用方法来实现日志记录,也可以使用注解的方式实现,总的来说使用注解的方式,更加的简单,便捷。 使用注解的方式主要是使用@Aspect这个注解,对使用自定...原创 2020-02-05 19:41:21 · 1186 阅读 · 0 评论 -
String、StringBuffer和StringBuilder之间的区别
String、StringBuffer和StringBuilder之间的区别@author 无忧少年@createTime 2019/12/091. Java String 类——String字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 需要注意的是,String的值是不可变的,这就导...原创 2019-12-09 20:37:09 · 8836 阅读 · 6 评论