java
文章平均质量分 70
hxcaifly
这个作者很懒,什么都没留下…
展开
-
【Java多线程编程】:还在使用 SimpleDateFormat?你的项目崩没?
文章目录引言1. 问题场景复现2. 多线程不安全原因3. 解决方案4. 基于JDK1.8的DateTimeFormatter5. 总结引言日常开发中,我们经常需要使用时间相关类,说到时间相关类,想必大家对SimpleDateFormat并不陌生。主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验...原创 2019-04-11 16:59:22 · 299 阅读 · 0 评论 -
【Java多线程编程】: 你真的懂wait、notify和notifyAll吗?
1. 引出问题生产者消费者模型是我们学习多线程知识的一个经典案例,一个典型的生产者消费者模型如下:public void produce() { synchronized (this) { while (mBuf.isFull()) { try { wait(); } catch ...转载 2019-01-28 16:26:11 · 208 阅读 · 0 评论 -
【Spring】: Spring IoC有什么好处呢?
1. 什么叫依赖倒置原则要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底...转载 2019-01-28 15:22:15 · 371 阅读 · 2 评论 -
【Java多线程编程】:Lock和synchronized的区别和使用
文章目录前言1. synchronized的缺陷2. java.util.concurrent.locks包下常用的类2.1. Lock2.2. ReentrantLock2.3. ReadWriteLock2.4. ReentrantReadWriteLock3. Lock和synchronized的选择4. 锁的相关概念介绍4.1. 可重入锁4.2. 可中断锁4.3. 公平锁4.4. 读写锁...转载 2019-01-28 11:12:49 · 175 阅读 · 0 评论 -
【Java多线程编程】:Threadlocal的使用及其内存溢出
1. 简介高并发处理起来比较麻烦,很多新手对此都会非常头疼。要知道避免并发的最简单办法就是线程封闭,也即是把对象封装到一个线程里,那么对象就只会被当前线程能看到,使得对象就算不是线程安全的也不会出现任何安全问题。Threadlocal是实现该策略的最好的方法。Threadlocal为每个线程提供了一个私有变量,然后线程访问该变量(get或者set)的时候实际上是读写的自己的局部变量从而避免了并发...转载 2019-01-28 09:56:34 · 904 阅读 · 0 评论 -
【Java设计模式】:行为型模式——状态模式
文章目录1. 状态模式的定义2. 初步实现代码3. 改进代码4. 状态模式适用场景5. 状态模式和策略模式比较1. 状态模式的定义状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。举个例子:海贼王中路飞在打多弗朗明哥的时候,首先是普通...转载 2019-02-01 09:54:15 · 197 阅读 · 0 评论 -
【Java基础】:深入理解 java I/O
参考:https://www.cnblogs.com/jxldjsn/p/8251398.html原创 2019-01-31 14:50:38 · 268 阅读 · 0 评论 -
【Java设计模式】:行为型模式—访问者模式
1. 访问者模式简介访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了。访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方法用来接受访...原创 2019-01-10 11:09:39 · 184 阅读 · 0 评论 -
【Java多线程编程】:CyclicBarrier和CountDownLatch比较
文章目录1. 前言2. 差异性对比3. CountDownLatch用法3.1. CountDownLatch类的简单介绍3.2. CountDownLatch应用示例4. CyclicBarrier用法4.1. CyclicBarrier类的简单介绍4.2. CyclicBarrier应用示例1. 前言CyclicBarrier和CountDownLatch都是同步辅助类,它们在Java1....原创 2019-01-20 12:23:58 · 307 阅读 · 1 评论 -
【Java设计模式】:行为型模式—模板模式
1.模板模式的定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差别适合于这种模式,如大话设计模式中说到的考试场景中,每个人的试卷都是一样的,只有答案不一样。这种场景就适合于模板方法模式。我这次自己写的是一个汽车启动的过程,每一种汽车启动的过程都基本是一样的流...原创 2019-01-14 22:43:21 · 157 阅读 · 0 评论 -
【Java设计模式】:行为型模式—策略模式
1.策略模式应用背景在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据应用场景的不同选择不同的算法或者策略来完成该功能。把一个类(A)中经常改变或者将来可能改变的部分提取出来,作为一个接口(B),然后在类(A)中包含这个接口(B),这样类(A)的实例在运行时就可以随意调用实现了这个接口的类©的行为。比如定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得...原创 2019-01-19 21:50:56 · 195 阅读 · 0 评论 -
【Java设计模式】:结构型模式—享元模式
1. 享元模式的定义享元模式中的“享”就是分享之意,指一物被众人共享,而这也正是该模式的终旨所在。享元模式有点类似于单例模式,都是只生成一个对象来被共享使用。这里有个问题,那就是对共享对象的修改,为了避免出现这种情况,我们将这些对象的公共部分,或者说是不变化的部分抽取出来形成一个对象。这个对象就可以避免到修改的问题。享元的目的是为了减少不会要额内存消耗,将多个对同一对象的访问集中起来,不必为...原创 2019-01-09 10:53:28 · 178 阅读 · 0 评论 -
【JVM第十四篇】: Java ClassLoader不再那么难以理解了
文章目录1. ClassLoader 做什么的?2. 延迟加载3. 各司其职4. ClassLoader 传递性5. 双亲委派6. Class.forName7. 自定义加载器8. Class.forName vs ClassLoader.loadClass9.钻石依赖10. 分工与合作11. Thread.contextClassLoader1. ClassLoader 做什么的?顾名思义,...转载 2019-01-18 22:14:52 · 250 阅读 · 0 评论 -
【Java设计模式】:结构型模式—装饰者模式
文章目录1. 结构型模式的定义2. 装饰者模式的角色3. 具体案例说明4. UML图表示5. 具体代码实现6. 装饰者模式适用场景1. 结构型模式的定义那生活中的例子来说明,对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮、更温馨、更实用。在软件设计中,对已有对象(新房)的功能进行扩展(装修),可以使对象的功能变得更见健全。把通用功能封装在装饰器中,用到的地方进行调用。装饰模式...原创 2019-01-07 22:35:46 · 196 阅读 · 0 评论 -
【Java网络编程】:为什么Netty使用的是NIO而不是AIO
1. 前言AIO是异步非阻塞的,NIO是同步非阻塞的。理论上讲,AIO的吞吐量肯定比NIO的要大。两种IO的概念如下:NIO模型: 同步非阻塞。NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞。服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO模型: 异步非阻塞。服务器实现模式为一个有效...原创 2019-01-03 11:14:31 · 2347 阅读 · 0 评论 -
【Java设计模式】: 结构型模式—适配器模式
1. 适配器模式的定义官方定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。官方定义还是显得不是那么好理解。其实就是要用到两个不相关的类/接口,但是又没有源代码,或者不想修改源代码,而增加一个类来完成合并使用的目的。适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见...原创 2019-01-03 09:42:20 · 168 阅读 · 0 评论 -
【Java设计模式】:结构型模式—组合模式
1. 组合模式的定义组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。很明显,这是树形结构,终结点叫叶子节点,非终节点(组节点)叫树枝节点,第一个节点叫根节点。同时也类似于文件目录的结构形...原创 2019-01-05 22:44:32 · 194 阅读 · 0 评论 -
【Java基础】:HashMap和ConcurrentHashMap的原理
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。1. HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体...原创 2019-02-07 16:47:16 · 167 阅读 · 1 评论 -
CPU占用100%排查
1. 引出问题某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?2. 排查过程步骤一:找出最耗CPU的进程方法:执行:top键入大写P,进程按照占用CPU从高到低排序如图所示:如上图,最耗CPU的进程PID为1...转载 2019-02-14 09:44:00 · 1953 阅读 · 0 评论 -
Intellij IDE报错:[Information:java:javacTask:源发行版8需要目标发行版1.8]
这个错误我不止遇到一次<原创 2019-04-02 10:22:43 · 643 阅读 · 0 评论 -
【JVM第十五篇】: 从实际案例聊聊Java应用的GC优化
文章目录引言1. 优化前的准备1.1. GC优化需知1.2. JVM基础回顾1.3. 参数基本策略2. 优化步骤2.1. 确定目标2.2. 优化2.3. 验收优化结果3. GC优化案例3.1. 案例一 Major GC和Minor GC频繁3.2. 案例二 请求高峰期发生GC,导致服务可用性下降3.3. 案例三 发生Stop-The-World的GC4. 总结引言当Java程序性能达不到既定目...转载 2019-03-23 17:07:42 · 346 阅读 · 0 评论 -
【Java设计模式】:行为型模式—命令模式
文章目录1. 命令模式(Command)的定义2. 命令模式(Command)的适用性3. 命令模式(Command)的参与者4. 命令模式(Command)的UML类图5. 具体的代码实现6. 总结1. 命令模式(Command)的定义将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作,将”发出请求的对象”和”接收与执行这些请求的对象”分...原创 2019-03-19 11:03:09 · 132 阅读 · 0 评论 -
【Java设计模式】行为型模式—解释器模式
文章目录1. 解释器模式的定义2. 解释模式的结构3. 示例代码1. 解释器模式的定义给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语句中的句子。2. 解释模式的结构下面就以一个示意性的系统为例,讨论解释器模式的结构。系统的结构图如下所示:抽象表达式角色(Expression):声明一个所有的具体表达式角色都需要实现的...转载 2019-03-17 21:45:13 · 170 阅读 · 0 评论 -
【Java设计模式】:行为型模式—责任链模式
文章目录1. 责任链模式定义2. 具体实例3. 责任链模式的好处1. 责任链模式定义责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。Tomcat中的Filter...转载 2019-03-20 10:10:40 · 155 阅读 · 0 评论 -
【Java并发编程实战】:Java中的读写锁及其实现分析
文章目录1. 前言2. 读写锁的接口与示例3. 读写锁的实现分析3.1. 读写状态的设计3.2. 写锁的获取与释放3.3. 读锁的获取与释放3.4. 锁降级1. 前言在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了...原创 2019-03-10 23:34:08 · 728 阅读 · 0 评论 -
【Java设计模式】:行为型模式—迭代器模式
文章目录1. 迭代器模式定义2. 迭代器模式的角色构成3. 迭代器模式应用的场景及意义4. 迭代器模式的优缺点1. 迭代器模式定义迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。迭代器模式不复杂,也比较常见,我们平时用的Java集合类对象其实内部已经实现了迭代器模式,比如ArrayList。2. 迭代器模式的角色构成(1)迭代器角...转载 2019-03-15 09:32:52 · 129 阅读 · 0 评论 -
《Java并发编程实战》读书总结:synchronized和ReentrantLock之间怎么选择
ReentrantLock在加锁和内存上提供的语义与内置锁synchronized相同,此外它还提供了一些其他功能,比如定时的锁等待,可中断的锁等待,公平性,以及实现非块结构的加锁。ReentrantLock在性能上似乎优于内置锁,其中在Java6中略有胜出,而在Java5.0则是远远胜出。那么为什么不直接弃用synchronized,并在所有的并发代码中都是用ReentrantLock?与显...原创 2019-03-10 16:16:28 · 296 阅读 · 2 评论 -
【Spring】:事务管理
文章目录1. 事务介绍2. 事务的四个特性(ACID)3. Spring 事务管理的核心接口4. PlatformTransactionManager 事务管理器5. TransactionStatus 事务状态6. TransactionDefinition 基本事务属性的定义7. Spring 编程式事务和声明式事务的区别8.不用事务实现转账9.编程式事务处理实现转账(TransactionT...原创 2019-03-04 10:40:17 · 301 阅读 · 0 评论 -
【Java设计模式】:行为型模式—中介者模式
文章目录1. 中介者模式(Mediator pattern)定义2. 中介者的作用3. 中介者模式的结构4. 代码演示5. 中介者模式的优缺点:1. 中介者模式(Mediator pattern)定义使用中介者模式来集中相关对象之间复杂的沟通和控制方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相...转载 2019-03-14 10:19:38 · 184 阅读 · 0 评论 -
Twitter的分布式自增ID算法snowflake
1. 引言分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没...转载 2019-03-09 10:51:57 · 111 阅读 · 0 评论 -
【Java基础】:volatile实现可见性的原理
1. 引言在java并发编程中,一定绕不开volatile、synchronized和lock几个关键字,其中volatile关键字是用来解决共享变量(类成员变量、类的静态成员变量等)的可见性问题的,非共享变量(方法的局部变量)是分配在JVM虚拟机的栈中,是线程私有的,不涉及可见性问题。那么什么是可见性?参考:https://blog.csdn.net/nch_ren/article/de...转载 2019-03-04 09:19:02 · 1881 阅读 · 0 评论 -
【Java设计模式】:行为型模式—备忘录模式
1. 场景当我们使用文本编译器记录一些内容时,发现这一步写错了,往往可以使用Ctrl+Z的方式会退到上一个状态,其中运用到的知识就是备忘录模式。2. 定义备忘录模式,即保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。3. 模式结构发起者角色(Originator):负责创建一个备忘录用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。备忘录角色(Memen...转载 2019-03-02 16:08:45 · 155 阅读 · 0 评论 -
【任务调度系统第四篇】:Quartz的原理
1. 引言XXL Job和azkaban的任务调度功能其实都是基于quartz来开发的,并且Spring也集成了Quartz模块。 所以如果想深入了解调度原理,那其实有必要先对Quartz做一番了解。参考:https://www.cnblogs.com/Dorae/p/9357180.html...原创 2019-03-05 15:15:59 · 6450 阅读 · 4 评论 -
【Java多线程编程】:线程同步的方法
1.为何要线程同步java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。2. 线程同步的方式2.1. synchronized 同步synchronized 的同步方式主要有两种:同步方法和同步代码块。同步方法即...原创 2019-02-20 15:55:12 · 321 阅读 · 0 评论 -
【Spring】: JDK和CGLIB动态代理区别
文章目录1. 前言2. 两种代理方式的比较总结2.1. 实现原理2.2. 何时使用JDK还是CGLiB2.3. 如何强制使用CGLIB实现AOP2.4. JDK动态代理和CGLIB字节码生成的区别2.5. CGlib比JDK快?2.6. Spring如何选择用JDK还是CGLiB3. 代码实例4. JDK和CGLIB动态代理总结1. 前言Spring框架最经典的设计原理就是IoC(控制反转)和...转载 2019-02-25 11:43:38 · 182 阅读 · 0 评论 -
【Java缓存】:缓存进化史
1. 应用服务缓存优化可以看见图中分为几个阶段:第一阶段:数据同步加redis通过消息队列进行数据同步至redis,然后Java应用直接去取缓存 这个阶段优点是:由于是使用的分布式缓存,所以数据更新快。缺点也比较明显:依赖Redis的稳定性,一旦redis挂了,整个缓存系统不可用,造成缓存雪崩,所有请求打到DB。第二、三阶段:JavaMap到Guava cache这个阶段使用进程内缓存...转载 2018-12-25 18:43:26 · 235 阅读 · 0 评论 -
【Java设计模式】:创建型模式—建造者模式
1.建造者模式定义建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是酸菜鱼,来杭州之后印象最深刻的是清蒸鲈鱼。),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使...原创 2018-12-25 12:48:35 · 141 阅读 · 0 评论 -
【JVM第五篇】:不可不说的Java“锁”事
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 V...转载 2018-11-29 11:37:39 · 261 阅读 · 0 评论 -
【JVM第八篇】:Java并发编程:用AQS写一把可重入锁
前一篇博客Java并发编程:自己动手写一把可重入锁详述了如何用synchronized同步的方式来实现一把可重入锁,今天我们来效仿ReentrantLock类用AQS来改写一下这把锁。要想使用AQS为我们服务,首先得弄懂三个问题:AQS是什么?AQS已经做了什么以及我们还需要做些什么?AQS简介AQS是J.U.C包下AbstractQueuedSynchronizer抽象的队列式的同步器的简称...转载 2018-11-15 10:40:43 · 176 阅读 · 0 评论 -
【JVM第七篇】:Java并发编程:自己动手写一把可重入锁
关于线程安全的例子,简而言之就是多个线程在同时访问或修改公共资源的时候,由于不同线程抢占公共资源而导致的结果不确定性,就是在并发编程中经常要考虑的线程安全问题。前面的做法是使用同步语句synchronized来隐式加锁,现在我们尝试来用Lock显式加锁来解决线程安全的问题,先来看一下Lock接口的定义:public interface LockLock接口有几个重要的方法://获取锁,如果...转载 2018-11-15 10:29:12 · 150 阅读 · 0 评论