![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 94
Only寒暄
Make a Little Progress Every Day
展开
-
【深入AQS原理】35张图让你深入 AQS
谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。我们先看下AQS相关的UML图:image.png思维导图:image.pngAQS实现原理AQS中 维护了一个volatile int state(代表共享资源)和一个FIFO转载 2021-01-25 15:29:31 · 999 阅读 · 1 评论 -
synchronized实现原理,以及JVM对锁性能的优化
线程安全,是Java并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要原因有两点:1,存在共享数据(也称临界资源)2,存在多条线程,共同操作共享数据。本文由浅入深,逐步整理了synchronized的相关知识,主要包括:应用场景 原理概要 原理详解 低层实现 锁的优化(JDK1.6引入) 锁的升级(在什么情况下会升级,以及锁只能单向升级)应用方式synchr...转载 2019-10-16 12:24:57 · 330 阅读 · 0 评论 -
Java命令学习系列(二)——Jstack
jstack是java虚拟机自带的一种堆栈跟踪工具。功能jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事...转载 2019-08-09 14:02:13 · 179 阅读 · 0 评论 -
理解、学习与使用 JAVA 中的 OPTIONAL
从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但...转载 2019-07-17 14:18:06 · 294 阅读 · 0 评论 -
CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnab...转载 2019-07-18 16:19:06 · 202 阅读 · 0 评论 -
HashMap 在高并发下引起的死循环
HashMap 基本实现(JDK 8 之前)HashMap 通常会用一个指针数组(假设为 table[])来做分散所有的 key,当一个 key 被加入时,会通过 Hash 算法通过 key 算出这个数组的下标 i,然后就把这个 <key, value> 插到 table[i] 中,如果有两个不同的 key 被算在了同一个 i,那么就叫冲突,又叫碰撞,这样会在 table[i] 上...转载 2019-07-04 15:38:09 · 605 阅读 · 0 评论 -
Hystrix vs Sentinel
原文链接:技术选型:Sentinel vs Hystrix Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本文集链接:微服务Sentinel 是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于今年7月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Se...转载 2019-06-28 19:15:24 · 722 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
原文出处:JavaDoop今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 Concurrent...转载 2019-07-08 15:46:27 · 137 阅读 · 0 评论 -
Hystrix线程隔离技术解析-线程池
转载请注明出处,并附上链接http://www.jianshu.com/p/df1525d58c20认识HystrixHystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。我们要构建稳定、可...转载 2019-06-26 15:40:46 · 250 阅读 · 0 评论 -
Java与线程
并发不一定要依赖多线程(如PHP的多进程并发),但在Java中谈论并发,大多数都与线程脱不开关系线程的实现线程是CPU调度的基本单位。Thread类与大部分的Java API有显著的差别,它的所有关键方法都是声明为Native的。 意味着这个方法没有使用或无法使用平台无关的手段来实现。内核线程(Kernel-Lever Thread,KLT)直接由操作系统内核(Kermel,下...转载 2019-05-27 16:23:43 · 85 阅读 · 0 评论 -
Future和CompletableFuture解析与使用
一、Future模式Java 1.5开始,提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future接口可以构建异步应用,是多线程开发中常见的设计模式。当我们需要调用一个函数方法时。如果这个函数执行很慢,那么我们就要进行等待。但有时候,我们可能并不急着要结果。因此,我们可以让被调用者立即返回,让他在后台慢慢处理这个请求。对于调用者来说,则可以...转载 2019-03-28 20:41:06 · 1358 阅读 · 0 评论 -
挑战10个最难回答的Java面试题(附答案)
是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?一个...转载 2019-08-09 10:23:48 · 5326 阅读 · 0 评论 -
Java命令学习系列(一)——Jps
jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用java执行体的那种(例如,定制的启动 器)。另外,jps仅查找当前用户的Java进程,而不是当前系统中的所有...转载 2019-08-09 14:02:04 · 199 阅读 · 0 评论 -
lambda处理异常四种方式
最近对接第三方呼叫系统,第三方SDK的所有方法里都有异常抛出,因为用到了lambda,所以异常处理还是很必要的。本文主要用到了四种解决方案:直接代码块处理 自定义函数式接口,warp静态方法 通过Either 类型包装 通过Pair 类型进行再次包装方法一: 直接代码块处理: /** * 上线 * @param schoolId 学校id ...原创 2019-09-18 11:26:52 · 4443 阅读 · 0 评论 -
响应式编程中的Flux和Mono
响应式编程介绍反应式编程来源于数据流和变化的传播,意味着由底层的执行模型负责通过数据流来自动传播变化。比如求值一个简单的表达式 c=a+b,当 a 或者 b 的值发生变化时,传统的编程范式需要对 a+b 进行重新计算来得到 c 的值。如果使用反应式编程,当 a 或者 b 的值发生变化时,c 的值会自动更新。反应式编程最早由 .NET 平台上的 Reactive Extensions (Rx) ...转载 2019-08-20 11:18:42 · 8387 阅读 · 2 评论 -
Java命令学习系列(七)——javap
javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码。一般情况下,很少有人使用javap对class文件进行反编译,因为有很多成熟的反编译工具可以使用,比如jad。但是,javap还可以查看java编译器为我们生成的字节码。通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作。实例javap命令分解一个class文件,它根据options...转载 2019-08-09 14:08:11 · 123 阅读 · 0 评论 -
Java命令学习系列(六)——jinfo
jinfo可以输出java进程、core文件或远程debug服务器的配置信息。这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64位虚拟机上,需要指明-J-d64参数,如:jinfo -J-d64 -sysprops pid另外,Java7的官方文档指出,这一命令在后续的版本中可能不再使用。笔者使用的版本(jdk8)中已经不支持该命令(笔者翻阅了java8中该命令的文档,其中已经明...转载 2019-08-09 14:07:24 · 255 阅读 · 0 评论 -
Java命令学习系列(五)——jhat
jhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令。之前的文章讲到过,使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况。jhat命令解析会Java堆dump并启动一个web服务器,然后就可以在浏览器中查看堆的dump文件了。实例一...转载 2019-08-09 14:06:23 · 223 阅读 · 0 评论 -
Java命令学习系列(四)——jstat
jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包...转载 2019-08-09 14:05:30 · 140 阅读 · 0 评论 -
Java命令学习系列(三)——Jmap
Jmapjmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在Java命令学习系列(零)——常见命令及Java Dump介绍和Java命令学习系列(二)——Jstack中分别有关于Java Dump以及线程 Dump的介绍。这篇文章主要介绍Java的堆Dump以及jamp命令...转载 2019-08-09 14:04:27 · 179 阅读 · 0 评论 -
Java命令学习系列(零)——常见命令及Java Dump介绍
一、常用命令:在JDK的bin目彔下,包含了java命令及其他实用工具。jps:查看本机的Java中进程信息。jstack:打印线程的栈信息,制作线程Dump。jmap:打印内存映射,制作堆Dump。jstat:性能监控工具。jhat:内存分析工具。jconsole:简易的可视化控制台。jvisualvm:功能强大的控制台。二、认识Java Dump:什...转载 2019-08-09 14:01:42 · 117 阅读 · 0 评论 -
Spring Cache扩展:注解失效时间+主动刷新缓存
Spring Cache扩展:注解失效时间+主动刷新缓存Spring Cache 两个需求缓存失效时间支持在方法的注解上指定 Spring Cache默认是不支持在@Cacheable上添加过期时间的,可以在配置缓存容器时统一指定:@Beanpublic CacheManager cacheManager( @SuppressWarnings("rawtypes")...转载 2019-01-03 16:55:15 · 2946 阅读 · 2 评论 -
JVM的认识与调优
JVM转载 2017-06-27 10:30:28 · 237 阅读 · 0 评论 -
JAVA8 十大新特性详解
JAVA8 十大新特性详解转载 2017-06-27 16:48:01 · 644 阅读 · 0 评论 -
Java 7 的7个新特性
Java 7 的7个新特性转载 2017-06-27 16:45:28 · 470 阅读 · 0 评论 -
dubbo的几种通信协议
dubbo通讯协议对比转载 2017-06-26 16:01:28 · 3041 阅读 · 0 评论 -
OkHttp3使用详解
OkHttp3使用详解转载 2017-07-11 14:53:30 · 245 阅读 · 0 评论 -
OkHttp3的基本用法
OkHttp3的基本用法转载 2017-07-11 14:26:18 · 739 阅读 · 0 评论 -
攻破JAVA NIO技术壁垒
攻破JAVA NIO技术壁垒转载 2017-06-29 14:54:20 · 382 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来转载 2017-06-01 17:16:47 · 234 阅读 · 0 评论 -
拦截器和过滤器的区别
过滤器在web.xml中配置:(1)因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。url-pattern>*.actionurl-pattern>(2)因为在web.xml中配置了过滤器,所以,执行过程所有程序都经过struts2过滤器(路径是:/*),首先过滤自己相关的程序,如xx.action,先处理,如果是.html或者转载 2017-06-05 16:47:48 · 279 阅读 · 0 评论 -
dubbo作为消费者注册过程分析
dubbo作为消费者注册过程分析转载 2017-06-27 13:16:04 · 388 阅读 · 0 评论 -
mybatis动态sql中的trim标签的使用
mybatis动态sql中的trim标签的使用trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1、 select * from user 0"> AND name=#{name} 0"> AND gender=#{gender} 假如说name和gend转载 2017-06-15 17:20:07 · 263 阅读 · 0 评论 -
缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致...转载 2018-09-12 17:15:32 · 129 阅读 · 0 评论 -
JVM内存堆布局图解分析
JVM内存堆布局图解分析 转载原文出处:http://www.codeceo.com/article/jvm-memory-stack.html JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢了,当然原因肯定不止这一个,如在JVM中没...转载 2018-09-11 17:09:32 · 169 阅读 · 0 评论 -
Java的三种代理模式
Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不...转载 2018-08-06 17:57:47 · 108 阅读 · 0 评论 -
Spring中ioc的实现原理
Spring中ioc的实现原理学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是I...转载 2018-07-19 21:44:46 · 18455 阅读 · 2 评论 -
深入解析spring中用到的九种设计模式
转载请注明出处,文章首发于:http://itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习中运用到“无形”。...转载 2018-07-23 19:18:15 · 184 阅读 · 0 评论 -
获取IP地址
获取IP地址转载 2017-09-04 11:35:04 · 284 阅读 · 0 评论 -
swagger常用注解
swagger常用注解转载 2017-07-28 14:21:04 · 406 阅读 · 0 评论