
java
文章平均质量分 72
贵沫末
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
idea和tomcat控制台中文乱码
IDEA和Tomcat控制台中文乱码问题原因:编码不一致,tomcat启动后默认编码UTF-8,而windows的默认编码是GBK。所以只需配置启动tomcat后为GBK编码即可。做法:找到路径 $xxx$\apache-tomcat-xxx\conf\ 下的logging.properties文件,添加(或修改)语句为:java.util.logging.ConsoleHandler.encoding = GBK然后重启tomcat就ok了。...原创 2021-07-16 15:18:11 · 36 阅读 · 0 评论 -
Java异步任务CompletableFuture的使用
文章目录Java异步任务CompletableFuture的使用一、创建异步任务1、Future.submit2、supplyAsync / runAsync二、异步回调1、thenApply / thenApplyAsync2、thenAccept / thenRun3、 exceptionally4、whenComplete5、handle三、组合处理1、thenCombine / thenAcceptBoth / runAfterBoth2、applyToEither / acceptEither /原创 2022-03-31 14:28:41 · 154 阅读 · 0 评论 -
Centos中安装tomcat并设置开机自启
Centos7 安装 Tomcat8 的正确姿势 并设置开机自启 实践笔记1.配置防火墙:关闭防火墙和加入放行端口二选一1.1 直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)[root@localhost ~]# f原创 2021-05-27 10:14:31 · 421 阅读 · 0 评论 -
数据结构与算法——红黑树的实现
一、红黑树的介绍红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:(1) 每个节点或者是黑色,或者是红色。(2) 根节点是黑色。(3) 每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的原创 2021-05-25 15:10:51 · 46 阅读 · 0 评论 -
java并发编程——DelayQueue原理探究
DelayQueue原理探究 DelayQueue并发队列是一个无界阻塞延迟队列,队列中的每个元素都有个过期时间,当从队列获取元素时,只有过期元素才会出队列。队列头元素是最快要过期的元素。一、DelayQueue类图结构 由图可知,DelayQueue内部使用PriorityQueue存放数据,使用ReentrantLock实现线程同步。另外,队列里面的元素要实现Delayed接口,由于每个元素原创 2021-03-22 16:27:41 · 136 阅读 · 0 评论 -
java并发编程——PriorityBlockingQueue原理探究
文章目录PriorityBlockingQueue原理探究一、介绍二、PriorityBlockingQueue类图结构三、原理介绍1、offer操作2、poll操作3、put操作4、take操作5、size操作三、总结PriorityBlockingQueue原理探究一、介绍 PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素,其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。原创 2021-03-19 23:36:33 · 171 阅读 · 0 评论 -
java并发编程——ArrayBlockingQueue原理探究
ArrayBlockingQueue原理探究 上节介绍了使用有界链表方式实现的阻塞队列LinkedBlockingQueue,本节来研究使用有界数组方式实现的阻塞队列ArrayBlockingQueue的原理。一、类图结构 同样,为了能从全局一览ArrayBlockingQueue的内部构造,先来看它的类图,如下所示。 由该图可以看出,Ar原创 2021-03-19 21:15:09 · 228 阅读 · 0 评论 -
java并发编程——LinkedBlockingQueue原理探究
文章目录LinkedBlockingQueue原理探究一、类图结构二、LinkedBlockingQueue原理介绍1、offer操作2、put操作3、poll操作4、peek操作5、take操作6、remove操作7、size操作三、总结LinkedBlockingQueue原理探究 前面介绍了使用CAS算法实现的非阻塞队列ConcurrentLinkedQueue,下面我们来介绍使用独占锁实现的阻塞队列LinkedBlockingQueue。一原创 2021-03-18 00:15:31 · 247 阅读 · 0 评论 -
java并发编程——ConcurrentLinkedQueue原理介绍
文章目录ConcurrentLinkedQueue原理介绍一、offer操作二、add操作三、poll操作4、peek操作五、size操作六、remove操作七、contains操作总结ConcurrentLinkedQueue原理介绍 本节介绍ConcurrentLinkedQueue的几个主要方法的实现原理。一、offer操作 offer操作是在队列末尾添加一个元素,如果传递的参数是nul原创 2021-03-17 16:15:57 · 275 阅读 · 0 评论 -
java并发编程——JDK8中新增的StampedLock锁探索
JDK8中新增的StampedLock锁探索一、概述 StampedLock是并发包里面JDK8版本新增的一个锁,该锁提供了三种模式的读写控制,当调用获取锁的系列函数时,会返回一个long型的变量,我们称之为戳记(stamp),这个戳记代表了锁的状态。其中try系列获取锁的函数,当获取锁失败后会返回0的stamp值。当调用释放锁和装换锁的方法时需要传入获取锁时返回的值。StampedLock提供的三种读写模式的锁分别如下。原创 2021-03-17 10:53:37 · 68 阅读 · 1 评论 -
java并发编程——读写锁ReentrantReadWriteLokc原理
读写锁ReentrantReadWriteLokc原理 解决线程安全问题用ReentrantLock就可以了,但是ReentrantLock是独占锁,某时只有一个线程可以获取该锁,而实际中会有写少读多的场景,显然ReentrantLock满足不了这个需求,所以ReentrantReadWriteLock应运而生。ReentrantReadWriteLock采用读写分离的策略,允许多个线程可以同时获取锁。一、类图结构 &n原创 2021-03-16 14:05:13 · 71 阅读 · 1 评论 -
java并发编程——独占锁ReentrantLock原理解析
文章目录独占锁ReentrantLock原理解析一、类图结构二、获取锁1、void lock()方法2、void lockInterruptibly()方法3、boolean tryLock()方法4、boolean tryLock(long timeout, TimeUnit unit)方法三、释放锁1、void unlock()方法四、小结独占锁ReentrantLock原理解析一、类图结构 Reentrantlock是可重入的独占锁,同时只原创 2021-03-15 23:53:42 · 206 阅读 · 1 评论 -
java并发编程——抽象同步队列AQS概述
文章目录抽象同步队列AQS概述一、AQS——锁的底层原理二、AQS——条件变量的支持抽象同步队列AQS概述一、AQS——锁的底层原理 AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。另外,大多数开发者可能永远不会直接使用AQS,但是知道其原理对于架构设计还是很有帮助的。下面看一下AQS的类图结构,如下:  原创 2021-03-15 00:17:18 · 64 阅读 · 0 评论 -
java并发编程——Java并发包中锁的原理剖析(LockSupport工具类)
文章目录LockSupport工具类1、void park()方法2、void unpark(Thread thread)方法3、void parkNanos(long nanos)方法4、park(Object blocker)方法5、void parkNanos(Object blocker, long nanos)方法6、void parkUnitil(Object blocker, long deadline)方法LockSupport工具类原创 2021-03-14 19:53:46 · 74 阅读 · 0 评论 -
java并发编程——并发List源码剖析(CopyOnWriteArrayList)
文章目录并发List源码剖析一、介绍二、主要方法源码解析1、初始化2、添加元素3、获取指定位置元素4、修改指定元素5、删除元素6、弱一致性的迭代器7、弱一致性实例三、总结并发List源码剖析一、介绍 并发包下的并发List只有CopyOnWriteArrayList。CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。Copy On Wri原创 2021-03-14 15:57:12 · 138 阅读 · 1 评论 -
java并发编程——LongAdder类解析
LongAdder类解析一、LongAdder介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong时,在高并发行下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,这就导致了大量线程竞争失败后,会通过无限循环不断进行自旋尝试CAS的操作,而这会白白浪费CPU资源。 &nb原创 2021-03-14 02:28:58 · 118 阅读 · 0 评论 -
java并发编程——ThreadLocalRandom类解析
ThreadLocalRandom类解析一、Random类及其局限性 在JDK7之前包括现在,java.util.Random都是使用广泛的随机数生成工具类,而且java.lang.Math中的随机数生成类也是使用的Random的实例 Random类原理:在每个Random实力里面都有一个原子性的种子变量用来记录当前的种子值,当要生成新的随机数时需要根据当前的种子计算新的种子并更新回原子变量。在原创 2021-03-13 21:53:08 · 91 阅读 · 1 评论 -
java并发编程——Unsafe类
Unsafe类一、前言JDK的rt.jar包中的Unsafe类提供了硬件级别的原子性操作,Unsafe类中的方法都是native方法,他们使用JNI的方式访问本地C++实现库。下面我们来了解一下Unsafe提供的几个主要的方法以及编程时如何使用Unsafe类做一些事情。二、Unsafe的初始化package com.gykalc.jdk8.thread;import sun.misc.Unsafe;import java.lang.reflect.Field;import java.uti原创 2021-03-13 19:54:09 · 43 阅读 · 1 评论 -
java——CAS概述
文章目录CAS概述一、自定义实现一个CAS(Compare and Swap)二、CAS中的ABA问题三、原子变量类1、AtomicInteger的使用2、AtomicIntegerArray的使用3、AtomicInegerFieldUpdater的使用4、AtomicReference的使用CAS概述 CAS(Compare And Swap)是由硬件实现的。 CAS可以将read - mo原创 2021-03-09 23:10:51 · 85 阅读 · 1 评论 -
java——内部锁:synchronized关键字
内部锁:synchronized关键字 Java中的每个对象都有一个与之关联的内部锁(Intrinsic lock),这种锁也称为监视器(Monitor),这种内部锁是一种排它锁,可以保障原子性、可见性、有序性。 内部锁是通过synchronized关键字实现的synchronized(对象锁) { 同步代码块}1、synchronized同步代码块package com.gykalc原创 2021-03-08 17:22:31 · 36 阅读 · 1 评论 -
java——线程同步机制简介
线程同步机制简介 线程同步机制是一套用于协调线程之间的数据访问的机制,该机制可以保障线程安全。 Java平台提供的线程同步机制包括:锁,volatile关键字、final关键字、static关键字、syncronized关键字、以及相关的API,如Object.wait()/Object.notify()等一、锁概述 线程安全问题的产生前提原创 2021-03-08 16:58:37 · 47 阅读 · 1 评论 -
java——java内存模型
java内存模型原创 2021-03-08 16:33:02 · 48 阅读 · 0 评论 -
java——线程安全问题
线程安全问题 非线程安全主要是指多个线程对同一对象的实例变量进行操作时,会出现值被更改,值不同步的情况。 线程安全问题表现为三个方面:原子性,可见性,有序性一、原子性 原子(Atomic)就是不可分割的意思,原子操作的不可分割有两层含义:1、访问(读、写)某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生,即其他线程原创 2021-03-08 16:13:36 · 36 阅读 · 1 评论 -
java基础——多线程概述
文章目录多线程概述一、线程相关概念1、进程(Process)2、线程(Thread)3、主线程与子线程4、串行、并发与并行二、线程的创建与启动三、线程的常用方法1、currentThread()方法2、setName()/getName()3、isAlive()4、sleep()5、getId()6、yield()7、setPriority()8、interrupt()、isInterrupted()9、setDaemon()四、线程的生命周期五、多线程的优势与存在的风险1、多线程编程具有的优势2、多线程编原创 2021-03-08 14:21:24 · 65 阅读 · 0 评论 -
java——观察者模式
文章目录观察者模式一、什么是观察者模式二、观察者模式的应用三、观察者模式的实现1、类图2、主题:Subject3、抽象观察者:Observer4、具体被观察者和被观察属性:CCTV1、News5、具体观察者:LiSi、ZhangSan、WangWu6、调用测试类:Client观察者模式一、什么是观察者模式 观察者一般可以看做是第三者,比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时原创 2021-03-07 21:06:56 · 308 阅读 · 1 评论 -
java——迭代器模式
文章目录迭代器模式一、什么是迭代器模式二、迭代器模式的结构三、迭代器模式的使用场景四、迭代器模式的优缺点五、迭代器模式的实现(代码示例)1、类图2、抽象迭代器角色:Iterator3、抽象容器角色:Aggregate4、Book类5、具体容器角色:BookShelf6、具体迭代器类:BookShelfIterator7、调用类:Client迭代器模式一、什么是迭代器模式 迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删原创 2021-03-07 18:29:51 · 191 阅读 · 1 评论 -
java——访问者模式
文章目录访问者模式一、前言二、访问者模式的使用场景三、访问者模式的UML类图四、访问者模式的简单示例1、类图2、抽象被访问者:Staff3、具体被访问者:Manager、Engineer4、抽象访问者:Visitor5、具体访问者:CEOVisitor、CTOVisitor6、业务报表类:BusinessReport7、测试类:Client五、总结访问者模式一、前言 最复杂的设计模式,并且使用频率不高,《设计模式》的作者评价为:大多情况下,你不需要原创 2021-03-07 16:43:05 · 109 阅读 · 1 评论 -
java——命令模式
命令模式一、前言 在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。 在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处原创 2021-03-06 14:41:30 · 38 阅读 · 1 评论 -
java——模板方法模式
模板方法模式一、什么是模板方法模式 所谓模板方法模式,其实很简单,可以从模板的角度考虑,就是一个对模板的应用,就好比老师出试卷,每个人的试卷都是一样的,即都是从老师的原版试卷复印来的,这个原版试卷就是一个模板,可每个人写在试卷上的答案都是不一样的,这就是模板方法模式,是不是很好理解。它的主要用途在于将不变的行为从子类搬到超类,去除了子类中的重复代码。 模板方法模式(TemplateMethod)原创 2021-03-05 21:00:16 · 46 阅读 · 1 评论 -
java——静态代理模式和动态代理模式还有cglib代理
文章目录静态代理模式和动态代理模式一、静态代理模式1、需要代理的接口2、代理实现类3、代理类4、调用测试类二、动态代理模式1、需要代理的接口2、代理实现类3、代理类4、调用测试类静态代理模式和动态代理模式 在很多AOP框架中都使用到了静态代理和动态代理模式还有cglib代理,可以在不修改类的前提下,拓展类的方法。 静态代理和动态代理都需要代理目标实现某个接口,那么如果某个类没有实现接口怎么办呢?原创 2021-03-05 17:46:55 · 52 阅读 · 1 评论 -
java——享元模式
文章目录享元模式一、动机二. 定义与结构三、代码示例1、类图展示2、抽象棋子类3、黑白棋子类4、位置类5、棋子工厂类6、调用测试类享元模式摘要: 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式通过共享技术实现相同或相似对象的重用提高系统资源的利用率。本文首先阐述了享元模式要解决的问题和解决问题的理念,然后从实现角度重点说明了该模式的原创 2021-03-05 16:26:15 · 85 阅读 · 1 评论 -
java——外观模式
外观模式一、什么是外观模式 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。 其实本篇要说的这个设计模原创 2021-03-05 14:53:33 · 41 阅读 · 1 评论 -
java——组合模式
文章目录组合模式一、模式定义二、模式结构1、组成元素2、优点3、缺点三、代码示例1、类图2、抽象构建角色:OrganizationComponent3、树枝构件角色:University和College4、树叶构件角色:Department5、调用测试类:Client组合模式一、模式定义 组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。 组合模式对单个对象(叶子对象)和组合对象原创 2021-03-05 13:31:51 · 726 阅读 · 1 评论 -
java——装饰者模式
文章目录装饰者模式一、定义二、角色三、代码示例1、抽象饮料类,被装饰的类2、抽象咖啡类,被装饰类的子类3、具体实现类,被装饰类的实现类4、抽象装饰类5、装饰类的具体实现类6、调用测试类装饰者模式一、定义 装饰模式的设计理念主要是以对客户端透明的方式动态扩展对象的功能,是继承关系的一个替代(继承会产生大量的子类,而且代码有冗余)。装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。装饰模式把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩原创 2021-03-04 23:38:45 · 54 阅读 · 1 评论 -
java——桥接模式
桥接模式一、前言 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。二、桥接模式的用意 桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都原创 2021-03-04 15:52:03 · 47 阅读 · 0 评论 -
java——接口适配器
文章目录接口适配器一、前言二、接口适配器模式UML图三、代码示例1、适配接口:PowerOutput2、接口适配器:PowerAdapter3、需要用到接口的具体类,例如手机类:Phone4、实现具体接口方法的类,也就是手机类需要用到的类,Output5V5、调用类:Client接口适配器一、前言 设想,我现在的目标接口有多个方法,可以输出5V,12V,20V的电压。按照正常逻辑,设计一个适配器去实现这个接口,很显然需要实现所有的方法。但是,实际使原创 2021-03-03 23:09:58 · 149 阅读 · 0 评论 -
java——适配器模式之对象适配器模式
文章目录对象适配器模式一、与类适配器的区别二、代码实例1、Power220V2、Power5V3、PowerAdapter4、Phone5、Client对象适配器模式一、与类适配器的区别 类适配器的重点在于类,是通过构造一个继承Adaptee类来实现适配器的功能; 对象适配器的重点在于对象,是通过在直接包含Adaptee类来实现的,当需要调用特殊功能的时候直接使用Adapter中包含的那个Ad原创 2021-03-03 22:50:42 · 102 阅读 · 1 评论 -
java——适配器模式之类适配器模式
类适配器模式一、适配器在生活中的应用现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。二、适配器基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作 的两个类可以协同工作。其别名为包装器(Wrapper)。适配器模式属于结构型模式。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。三、适配器工作原理适配器模式:将一个类的接原创 2021-03-03 20:57:38 · 66 阅读 · 1 评论 -
java——建造者模式
文章目录建造者模式一、前言二、简介三、实现方式四、核心角色五、UML类图六、代码案例七、总结1、优点2、缺点3、应用场景建造者模式一、前言建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。使用多个简单的对象一步一步构建成一个复杂的对象,有点像造房子一样一步步从地基做起到万丈高楼。我想这也是为什么被称呼为建造者模式的原因吧!反正我是找不出更好的理由了。这样理解反而更容易记住。不好意思,废话有点多了,且看下文如何分解!!!二、简介1、定义:将一个原创 2021-03-03 12:37:35 · 118 阅读 · 1 评论 -
java——原型模式、深拷贝与浅拷贝
文章目录一、原型模式1、原型模式的概念2、原型的UML图3、浅克隆与深克隆4、Object的clone方法,如果不重写,默认是只实现了浅克隆,下面列举两种方式实现深克隆一、原型模式1、原型模式的概念原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象!2、原型的UML图原型模式分三个角色,抽象原型类,具体原型类,客户类。抽象原型类(prototype):它是声明克隆方法的接口,是所有具体原型类的公共父类,它可以是接口,抽象类甚至是一个具体的实现类。具体原型类(c原创 2021-03-03 11:19:49 · 54 阅读 · 1 评论