
Java
文章平均质量分 73
Aaron_涛
囧囧有神
展开
-
一分钟带你彻底理解同步异步,阻塞非阻塞的区别
同步异步&阻塞非阻塞区别1. 同步&异步2. 阻塞&非阻塞. 几种IO分类3.1. 同步阻塞IO3.2. 同步非阻塞IO3.3. IO多路复用(Reactor模式)3.4. 异步IO(Proactor模式)1. 同步&异步同步与异步:关心的是消息通知机制如果调用方发起调用后,需要等待这个返回值,调用方主动去等它的返回,那么就是同步如果调用方发起调用后,立刻返回了,不同调用方去主动等它返回或者主动询问它返回,那么就是异步下面简单列举几个例子同步A a = read原创 2020-05-16 18:20:56 · 1073 阅读 · 0 评论 -
分支预测是什么?为什么有序数组比无序数组快?
【12】今天是晴天还是下雨1. 背景1.1. 问题的提出2. 前情提示2.1. 流水线2.2. 分支预测器2.2.1. 久远的历史2.2.2. 在现代CPU中的情况2.2.2.1. 没有分支预测器会怎样?2.2.2.2. 有分支预测期的pipeline2.2.2.3. 常见的分支预测器3. 分析4. 结论1. 背景import java.ut...原创 2020-03-02 22:12:53 · 921 阅读 · 0 评论 -
为什么volatile关键字保证不了线程安全
在当前高并发的时代,不懂一点高并发多线程都不好意思出去,即使没地方使用,网上大多数相关文档博客也都讲解了这些部分。 我并不想具体介绍什么是volatile,我写这篇博客目的是说明白为什么volatile保证不了线程安全。想要线程安全必须保证原子性,可见性,有序性。而volatile只能保证可见性和有序性 在说明这个问题之前,首先还是要说明下cpu和内存,cpu和内存直接是有高速...原创 2018-07-10 20:06:17 · 17089 阅读 · 15 评论 -
Java多线程——线程池之初探
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...原创 2018-07-25 21:49:16 · 497 阅读 · 0 评论 -
BIO,NIO,多路复用,AIO
BIO,NIO,多路复用,AIO概念理解IO流程三大IO模型的解释总结BIO,NIO,多路复用,AIO概念理解同步和异步 关注点在于处理机制,同步在于等待上一条语句调用后的返回结果才继续,异步在于事件响应回调机制,语句调用后直接返回,等触发事件之后,自动调用写好的回调函数阻塞非阻塞 关注点在于线程是否挂起 阻塞在于得到结果之前会挂起线程,非阻塞在于不会...原创 2018-08-10 10:11:16 · 2870 阅读 · 10 评论 -
Java如何判断整数溢出,溢出后怎么得到提示
问题在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE解决方案JDK8已经帮我们实现了Math下,不得不说这个方法是在StackOverflow找到了的,确实比国内一些论坛好多了加法public static int addExact(int x, int y) { int r = x + y...原创 2018-08-13 10:58:09 · 14205 阅读 · 5 评论 -
ConcurrentHashMap分析
ConcurrentHashMap分析JDK7size方法get方法put方法JDK8get方法put方法initTable方法size方法ConcurrentHashMap分析JDK7static final class Segment<K,V> extends ReentrantLock implements Se...原创 2018-08-08 20:10:57 · 453 阅读 · 0 评论 -
Mockito快速使用教程
1. 什么是 MockitoMockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试. 2. 为什么使用Mockito我们系统一般的功能是controller->biz->service→Dao如果我们只想测试一个biz中的功能,我们必须配置好类与类之间的关系,组装好一...原创 2019-02-15 19:49:24 · 8566 阅读 · 0 评论 -
为什么Caffeine比Guava好?
目录1.缓存淘汰算法1.1.FIFO1.2.LRU1.3.LFU2.几种缓存的实现2.1.原生Java2.2.Guava2.3.Caffeine3.参考资料1.缓存淘汰算法1.1.FIFO先进先出:最先进入的缓存被最先淘汰掉,这个基本不会有人用来做缓存1.2.LRU最近最少未使用:每次访问就把这个元素放到队列头部...原创 2019-03-27 22:13:45 · 15447 阅读 · 5 评论 -
长尾请求
1.什么是长尾?长尾请求一般是指明显高于均值的那部分占比较小的请求。 业界关于延迟有一个常用的P99标准, 也就是99%的请求延迟要满足在一定耗时以内, 1%的请求会大于这个耗时, 而这1%就可以认为是长尾请求。2.长尾会导致什么危害假设,一个服务B,有1%的可能性响应时间大于1s,如果此刻一个上游服务A需要完成一次查询,需要同时查询100次的话,那么服务A响应时间超过1s的...原创 2019-04-14 22:01:43 · 2969 阅读 · 3 评论 -
协程-初探
目录1.协程定义2.进程,线程,协程3.协程优点3.1.内存小3.2.效率高3.3.减少同步锁3.4.同步代码思维写异步代码4.协程的缺点4.1.无法利用多核资源4.2.协程中不能有阻塞操作4.3.CPU密集型不是长处5.Java实现协程(Kilim)的原理6.例子1.协程定义Coroutines are co...原创 2019-08-17 20:33:06 · 1769 阅读 · 0 评论 -
JDK8中HashMap依然会死循环!
JDK8中HashMap依然会死循环! 是否你听说过JDK8之后HashMap以及解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。 然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v= 今日在查看监控时候发现,某一台机器load飙升感觉问题不对劲,ssh大法登陆机器,top,top -Hp,jstack,jmap四连击保存...原创 2019-09-26 21:53:34 · 9478 阅读 · 7 评论 -
JUC工具之CountDownLatch源码解读
CountdownLatch 倒计时计时器。 犹如倒计时的计时器,调用CountdownLatch对象的countDown()方法,就将计时器减一当计时器到达0时,则所有线程或单个线程开始执行。 可以实现一个人(多人)等待其他所有人都来通知他,可以实现一个通知多个人的效果。类似裁判一声令下运动员同时开始奔跑。import java.util.concurrent.CountDow...原创 2018-06-13 16:23:58 · 706 阅读 · 0 评论 -
理解ConditionObject源码
Condition接口Condition主要是为了配合lock使用,类似于wait和notify配合synchronize使用一样,起到线程之间的通信作用。public interface Condition { /** * 暂停此线程直至一下四种情况发生 * 1.此Condition被signal() * 2.此Condition被signalA...原创 2018-06-13 13:28:30 · 2105 阅读 · 4 评论 -
jdk5新特性
import static java.lang.System.out;import org.junit.Test;public class demo { /* * 静态导入 * import static 包名.类名.静态属性/静态方法/* * import static java.lang.System.out; * 简化代码 */ @Test public原创 2016-12-26 19:39:26 · 565 阅读 · 0 评论 -
通过反射取得hashmap的值
本人最近项目中在遇到个这个情况,需要做动态代理,invoke方法里的参数是object类型,实际参数是hashmap类型,需要从object类型里面取出key value键值对首先hashmap和object是不能直接强制转换类型的,我采用反射取得数据为了取得数据,首先得了解下hashmap的结构在这里只讲点关键点,hashmap里面有个内部类,Node这个就是存放key value原创 2017-08-07 17:40:11 · 5379 阅读 · 0 评论 -
java enum枚举的用法
/** * 枚举: * 数据的值不能任意,必须有范围使用到枚举 * 例子: * ennm Grade{ * A,B,C,D,E; * } */public class grade { /* * 没有枚举的时候,实现枚举的功能 */ public final static grade A = new grade(); public static final gra原创 2016-12-26 19:42:18 · 650 阅读 · 0 评论 -
使用序列化和反序列化实现深拷贝
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream原创 2017-08-20 09:50:42 · 1848 阅读 · 0 评论 -
关于Clone克隆对象的讲解
本人以前被问到有哪些方法创建对象我回答,new,反序列化,反射。后来才知道还有个克隆(汗颜)克隆clone,这个方法我经常在object类中看到,之前也一直没关注过它,直到最近看克隆的时候才开始关注什么是克隆?这得先讲解下new一个对象的原理,简单来说就是先在内存中分配一个对象(所要new的对象)大小的内存,然后通过构造方法往这个内存里面注入值,然后这个对象的引用而clone与原创 2017-08-15 21:35:25 · 917 阅读 · 0 评论 -
Object中hashcode(),equal()方法需要重写的时期
Java中的集合(Collection)有两类,一类是List,再有一类是Set。 前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。转载 2017-09-07 13:34:22 · 695 阅读 · 0 评论 -
内部类是如何访问外部类私有对象的
我们都是知道内部类就是写在一个类里面的类,类里面的类,不知道你们有没有看过javac之后的结果,就是将一个外部类编译后,生成的字节码文件结果public class OutClass{ private String name; private int id; private String address; public class innerClass{ priv原创 2017-09-09 15:04:44 · 11062 阅读 · 6 评论 -
关于匿名内部类的问题详解
之前写了篇关于内部类是如何访问外部类私有对象的在的角度就是成员内部类,详细的讲解了基本的原理下面我开始讲解下有关匿名内部类的有关原理(ps:个人理解)。public class OutClass{ private String name = "sa"; private int id = 12; private String address = "jaxu"; publi原创 2017-09-11 16:39:55 · 1507 阅读 · 1 评论 -
Java垃圾回收机制
java垃圾回收是java语言方面与c++的一个主要特性吧,极大的方便了程序员的开发操作,无需自己管理内存。要了解java垃圾回收机制首先简单了解下java内存模型JAVA内存模型程序运行的时候,内存主要由以下部分组成:堆:所有线程共享一个堆;存放的都是new 出来的对象;使用完了的对象,将来都不被使用的对象,由垃圾回收器回收,清理出内存以便创建新对象方法区:所有线程共享一个方法区;里面存放的内容...原创 2018-03-03 20:39:24 · 644 阅读 · 2 评论 -
学习Netty实战心得笔记
Netty是什么?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具是Netty能做什么??netty天生异步,封装了底层NIO,解决了NIO开发的复杂性,屏蔽底层细节,让用户开发更加方便,开发网络通信直块的框架使用,可以使用这个搭建http服务器等等Netty是怎么传输数据的??netty支持四种传输模式 olo nio local emb...原创 2018-04-13 19:21:08 · 1549 阅读 · 1 评论 -
ReentrantLock实现原理
以下是本篇文章的大纲1 synchronized和lock1.1 synchronized的局限性1.2 Lock简介2 AQS3 lock()与unlock()实现原理3.1 基础知识3.2 内部结构3.3 NonfairSync3.3.1 lock() 3.3.2 unlock()3.3.3 小结3.4 FairSync4 超时机制5 总结1 synchronized和lock1.1 sync...转载 2018-06-12 21:43:09 · 584 阅读 · 0 评论 -
Junit基础用法
//Person类public class Person { public void run(){ System.out.println("run"); } public void eat(){ System.out.println("eat"); }}import org.junit.Before;import org.junit.BeforeClass;im原创 2016-12-26 19:32:11 · 472 阅读 · 0 评论