Java
文章平均质量分 71
云川之下
这个作者很懒,什么都没留下…
展开
-
【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系
在java中,我们经常需要使用SSL/TLS连接,这种连接是加密连接,https之类的基于TCP/IP协议的应用层协议加密传输,也经常基于这种加密连接,这种连接jdk底层已经提供了默认的实现,并且是基于jdk中的keystroe证书库实现的认证。默认的SocketFactory实现ssl连接时,是基于这个默认的证书库的实现,因此当遇到证书库中不存在的证书时,就会出现ssl连接异常的问题。或者将不信任的证书安装到中解决问题。原创 2023-04-04 20:48:47 · 3912 阅读 · 0 评论 -
【java并发编程实战】第二章 对象有状态 & 无状态
a转载 2022-09-09 11:35:56 · 651 阅读 · 0 评论 -
java监视器模式
监视器模式转载 2022-08-30 19:50:51 · 1148 阅读 · 0 评论 -
ThreadLocal和synchronized的区别
和synchronized的区别原创 2022-08-20 22:52:00 · 705 阅读 · 0 评论 -
为什么说 HashMap 是无序的
hashmap无序原创 2022-06-27 16:21:20 · 2704 阅读 · 0 评论 -
字节码增强技术 Byte Buddy 、Javassist、Instrumentation
ClassFileTransformer接口一个代理实现ClassFileTransformer接口用于改变运行时的字节码(class File),这个改变发生在jvm加载这个类之前。对所有的类加载器有效。class File这个术语定义于虚拟机规范3.1,指的是字节码的byte数组,而不是文件系统中的class文件。接口中只有一个方法:byte[] transform( ClassLoader loader, String原创 2022-04-08 16:15:49 · 5572 阅读 · 0 评论 -
【Java基础】注解--@interface使用详解
文章目录1. 引言2. 语法规范2.1 继承的Annotation父接口2.2 @Target中的参数ElementType2.3 @Retention中的参数RetentionPolicy2.4 成员变量3. 获取注解信息3.2 使用场景——框架初始化过程中模拟扫描jar包和文件夹中的所有注解4. 注解的作用4.1 编译检查4.2 在反射中使用 Annotation4.3 根据 Annotation 生成帮助文档参考1. 引言注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用转载 2022-01-18 16:32:05 · 32536 阅读 · 0 评论 -
【netty进阶之路 跟着案例学netty】信号量停止netty
添加信令号,捕获ctl+c:package io.netty.cases.chapter.demo1;import sun.misc.Signal;import sun.misc.SignalHandler;import java.util.concurrent.TimeUnit;/** * Created by 李林峰 on 2018/8/3. */public class SignalHandlerTest { public static void main(String原创 2021-12-20 10:45:41 · 748 阅读 · 0 评论 -
线程池参数详解
文章目录1. 线程池参数2. 队列相关文章:queue & Deque 详细解析线程池参数1. 线程池参数构造函数: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit原创 2021-09-09 17:05:34 · 221 阅读 · 0 评论 -
为什么局部内部类和匿名内部类只能访问final的局部变量?
文章目录1. 问题描述2. 原因2.1 为什么外部成员变量不会有问题?1. 问题描述JDK1.8public class OutClass { private int age = 12;public class OutClass { private int age = 12; age= 11; public void outPrint( int x, int y) { x= 10; class InClass {原创 2021-09-06 20:16:47 · 355 阅读 · 0 评论 -
为什么重写equals方法时必须重写hashcode方法
文章目录1. == 与 equals的区别2. 重写equals()3. hashCode与equals的区别和联系3.1 Hash3.2 HashCode1. == 与 equals的区别如果两个引用类型变量使用==运算符,那么比较的是地址,它们分别指向的是否是同一地址的对象,结果一定是false,因为两个对象地址必然不同。==不能实现比较对象的值是否相同。所有对象都有equals方法,默认是Object类的equals,其结果与==一样。如果希望比较对象的值相同,必须重写equ原创 2021-09-06 19:23:42 · 6058 阅读 · 1 评论 -
SimpleDateFormat是非线程安全的(可用ThreadLocal解决)
文章目录1. SimpleDateFormat存在的风险2. 解决方案2.1 解决方案1:每次来都new新的,空间浪费比较大2.2 解决方案2:方法用synchronized修饰,并发上不来2.3 解决方案3:2.4 解决方案4:用ThreadLocal,一个线程一个SimpleDateFormat对象参考1. SimpleDateFormat存在的风险基于SimpleDateFormat封装的日期工具类用在多线程环境下会存在风险,可能报错误public class DateUtil { p转载 2021-08-26 17:34:53 · 465 阅读 · 0 评论 -
ThreadLocal全攻略:使用实战,源码分析,内存泄露分析
参考ThreadLocal全攻略:使用实战,源码分析,内存泄露分析转载 2021-08-26 15:14:56 · 700 阅读 · 0 评论 -
Java线程死亡(死掉、退出、挂掉)的几种情况
文章目录1. Java线程死亡的几种情况2. 验证上述结论2.1 测试1:线程正常结束后,isAlive()返回False2.2 测试2:子线程抛出异常之后,线程的isAlive()返回False相关文章Java线程死亡(退出)的几种情况【JVM】 OOM异常会导致JVM退出吗?1. Java线程死亡的几种情况Java线程会议如下三种方式结束,结束后就处于死亡状态1、run()或者call()方法执行完成,线程正常结束;2、线程抛出一个未捕获的Exception或Error;3、直接调用该线原创 2021-08-26 09:55:39 · 4824 阅读 · 0 评论 -
【JVM】 OOM异常会导致JVM退出吗?
参考JVM OOM异常会导致JVM退出吗原创 2021-08-25 17:35:01 · 1377 阅读 · 0 评论 -
异常Exception 和 运行时异常RuntimeException
文章目录概念概念Exception :受检查的异常,这种异常是强制我们catch或throw的异常。你遇到这种异常必须进行catch或throw,如果不处理,编译器会报错。比如:IOException。RuntimeException:运行时异常,这种异常我们不需要处理,完全由虚拟机接管。比如我们常见的NullPointerException,我们在写程序时不会进行catch或throw。RuntimeException也是继承自Exception的,只是虚拟机对这两种异常进行了区分。原创 2021-08-06 19:48:28 · 4614 阅读 · 0 评论 -
【线程、锁】什么是AQS(锁分类:自旋锁、共享锁、独占锁、读写锁)
文章目录1. 什么是AQS2. AQS底层使用了模板方法模式AQS的简单应用参考1. 什么是AQSAQS:全称为AbstractQuenedSynchronizer,抽象的队列式同步器,是除了java自带的synchronized关键字之外的锁机制,这个类在java.util.concurrent.locks包。AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的转载 2021-06-28 14:55:45 · 3798 阅读 · 0 评论 -
【Lambda】Lambda表达式里的“陷阱“ 匿名表达式 qualified this
文章目录1. 概述2. 演示2.1 如何让匿名表达式中的this指代外部类3. 小结1. 概述Lambda表达式中,this在词法上绑定到周围的类 (定义该Lambda表达式时所处的类)匿名类中,this在词法上绑定到匿名类匿名类中,如果需要引用周围类的this,需要使用qualified this由于Lambda表达式和匿名类中this引用不相同的对象问题,引入qualified this,即如何让this引用相同对象。2. 演示我们将演示Lambda表达式和匿名表达式中的this用法,转载 2021-06-09 10:10:20 · 431 阅读 · 0 评论 -
【java】comparator接口与Comparable接口的区别
文章目录1. 概述2. Comparable3. Comparator4. 总结1. 概述Comparator 和 Comparable都是java的一个接口, 并且是用来对自定义的class比较大小的。2. ComparableComparable 定义在 Person类的内部,子类需要实现compareTo()方法:public class Person implements Comparable { String name; int age public int原创 2021-04-23 19:16:12 · 1054 阅读 · 0 评论 -
【线程池】如何正确设置线程池的线程数,提高性能
文章目录概述如何设置线程池的线程数3. 总结3.1 怎么计算IO与cpu时间占比呢?概述往往在生产环境中,工作线程数,设置小了,无法充分利用CPU资源,性能会下降。设置大,线程上下文切换过于频繁,反而会使性能降低。可以关注一下协程,如java库提供的Quasar fiber轻量级线程、kilim以及kotlin语言支持的协程。java线程是用户线程与内核线程之间映射的,1:1模式,是通过内核完成调度的。而协程是N个内核线程多路复用M个协程的,N:M的模式,也就是在用户态的协程调度器完成的,减少了与内转载 2021-04-15 15:08:35 · 1749 阅读 · 0 评论 -
【maven】mvn、maven仓库查看可供选择的版本列表
https://mvnrepository.com/artifact/org.springframework/spring-webmvc/5.3.2原创 2021-03-31 10:30:52 · 2057 阅读 · 0 评论 -
【日志】Spring5新特性之日志体系
spring4所依赖的jar就是我们的jcl(commons-logging.jar),而spring5则依赖了一个叫spring-jcl的包参考:《Spring5新特性之日志体系》转载 2021-03-09 23:39:55 · 111 阅读 · 0 评论 -
【日志】架构师之路-分析混乱的日志体系
参考 《架构师之路-分析混乱的日志体系》转载 2021-03-09 23:32:24 · 90 阅读 · 0 评论 -
【线程、锁】Fork/Join
https://blog.csdn.net/tyrroo/article/details/81390202转载 2021-03-02 21:05:59 · 164 阅读 · 0 评论 -
【线程、锁】Java线程池如何保证线程池的核心线程存活不被销毁?execute()的执行逻辑
线程会在runWorker()方法里不停循环获取任务并执行,直到返回为空,而在getTask()方法里它就是调用阻塞队列的poll()或take()等待获取其中的任务。这两个方法的具体实现逻辑依赖线程池的阻塞队列。java.util.concurrent.ThreadPoolExecutor.getTask():参考:《Java线程池如何保证线程池的核心线程存活不被销毁?execute()的执行逻辑》...原创 2021-03-01 16:49:06 · 1356 阅读 · 0 评论 -
【集合类】HashSet & CopyOnWriteArraySet
文章目录1. 继承关系2. 特性3. 源码1. 继承关系它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过“动态数组(CopyOnWriteArrayList)”实现的,并不是散列表。和CopyOnWriteArrayList类似,其实CopyOnWriteSet原创 2021-02-27 18:15:01 · 341 阅读 · 0 评论 -
Quartz (3) 常见api解释
文章目录TriggerTrigger的公共属性优先级(priority)错过触发(misfire Instructions)TriggerBuilderwithIdentity()startAt()endAt()startNow()usingJobData()withPriority()ForJob()Job和Trigger关联问题TriggerTrigger是一个接口,字面意思触发器 - 定义执行给定作业的计划的组件。//v2.23public abstract class AbstractTri原创 2020-09-04 09:38:03 · 911 阅读 · 0 评论 -
quartz 传参
文章目录传入参数获取参数有时候,我们需要往job的execute()方法中传递参数,那么如果实现呢?传入参数quartz 中用 jobDataMap 去存储附加信息。jobDataMap类,每个JobDetail都关联了一个JobDataMap实例,JobDataMap是java.util.Map的子类,基本上是提供key- value形式的数据,当你创建JobDetail的时候,可以把附加信息放到JobDataMap中,那么在execute方法中可以根据key找到需 要的值。有两种方式将数据添加转载 2020-09-03 11:49:08 · 660 阅读 · 0 评论 -
Quartz (2) SchedulerFacotory用法总结
SchedulerFacotorySchedulerFacotory,顾名思义,就是生产Scheduler实例的工厂类。SchedulerFacotory是一个接口,它有两个实现:StdSchedulerFacotory: 通过配置文件来设置Scheduler的各项参数DirectSchedulerFactory: 主要通过硬编码来设置Scheduler的各项参数。StdSchedu...原创 2020-04-24 16:02:15 · 3254 阅读 · 0 评论 -
Quartz (1) 入门例子
TriggerTrigger是什么?Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的。Quartz有两大触发器:SimpleTrigger和CronTriggerSimpleTriggerSimpleTrigger可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。SimpleTrigg...原创 2020-03-17 19:12:34 · 439 阅读 · 0 评论 -
【正则表达式】小技巧汇总
1.找出html中所有的 <a ></a>标签原始html片段:<li><span class="chapter"><a href="getting-started-install.html">Get Elasticsearch up and running</a></span></li>使用正则匹配标签完整内容:<a.*</a>匹配的结果:<a href="gettin原创 2020-07-31 10:43:47 · 156 阅读 · 0 评论 -
【日志】Slf4J入门教程
本文依赖上一篇文章 Log4j入门教程1.配置依赖包引用,新增slf4j-api 、 slf4j-log4j12 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2...原创 2019-11-07 19:20:07 · 281 阅读 · 0 评论 -
【日志】Log4j入门教程
**日志级别org.apache.log4j.Level 类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL七种日志级别Appender输出端 类型 作用 ConsoleAppender 将日志输出到控制台 FileAppender 将日志输出到文件中 DailyRollingFileAppender 将日志输出到一个日志文...原创 2019-11-07 10:31:12 · 265 阅读 · 0 评论 -
【集合类】Java1.8 HashMap 实现原理和源码分析
文章目录1. 前言2.基本属性3. 定位哈希桶数组索引位置4. get 方法4.1 代码块1:getTreeNode4.2 代码块2:find4.2 代码块3:comparableClassFor5. put 方法5.1 代码块4:putTreeVal5.1.1 代码块5:tieBreakOrder5.2 代码块6:treeifyBin5.2.1 代码块7:treeify5.2.1.1 代码块8:moveRootToFront5.2.1.1.1 代码块9:checkInvariants6. resize 方转载 2021-02-17 14:54:49 · 190 阅读 · 0 评论 -
【集合类】hashmap扩容
文章目录1. 概述2. hashmap 1.7实现1. 概述由于hashmap 1.7 、1.8实现有所区别,单独列出。为什么要扩容?因为达到扩容条件时,说明链表的hash冲突比较严重了,这样链表的长度就会很长,查找或其他操作就会很慢!扩容后,减轻了hash冲突,提升操作效率。2. hashmap 1.7实现我们知道 HashMap 1.7 的底层是由数组,链表组成的,在 HashMap 做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算 hash 值,因为长度扩大以后,h原创 2021-02-16 18:51:08 · 193 阅读 · 0 评论 -
位运算与取模运算的效率对比
package com.test;public class Main { public static void main(String[] args) { bit(); modulus(); } public static void bit() { int number = 100 * 1000;// 分别取值10万、100万、1000万、1亿 int a = 1; long start = Sy原创 2021-02-16 17:15:43 · 1121 阅读 · 0 评论 -
【线程、锁】 AtomicReference(原子更新引用类型) & AtomicReferenceFieldUpdater(原子更新引用类型里的字段)
文章目录1. 概述2. AtomicReference2.1 构造函数2.2 例子3. AtomicReferenceFieldUpdater例子1. 概述原子更新基本类型的AtomicInteger,只能更新一个变量,如果要原子的更新多个变量,就需要使用这个原子更新引用类型提供的类。Atomic包提供了以下三个类:AtomicReference:原子更新引用类型。AtomicReferenceFieldUpdater:原子更新引用类型里的字段。AtomicMarkableReference:原创 2021-02-16 00:47:08 · 652 阅读 · 1 评论 -
【线程、锁】AtomicIntegerFieldUpdater 原子更新字段
文章目录1. 概述1.1 原理2. AtomicIntegerFieldUpdater1. 概述原子更新基本类型的AtomicInteger,只能更新一个变量值,而且过程很麻烦,还要计算偏移量,如果我们想更新自定义对象的某个属性或多个属性怎么办?如果我们只需要某个类里的某个字段,那么就需要使用原子更新字段类,Atomic包提供了以下三个类:AtomicIntegerFieldUpdater:原子更新整型的字段的更新器。AtomicLongFieldUpdater:原子更新长整型字段的更新器。A原创 2021-02-15 23:57:51 · 273 阅读 · 1 评论 -
【线程、锁】AtomicIntegerArray(原子更新基础数据类型数组) & AtomicReferenceArray(原子更新对象类型数组)
文章目录AtomicIntegerArrayAtomicReferenceArrayAtomicIntegerArray基础数据类型数组使用AtomicIntegerArray:package com.test;import java.util.concurrent.atomic.AtomicIntegerArray;public class AtomicIntegerArrayRunner { static int[] value = new int[] { 1, 2 };原创 2021-02-15 23:27:51 · 273 阅读 · 0 评论 -
【线程、锁】JDK 1.8 Unsafe类源码摘录
package com.xz.sun.misc;/* 类:执行硬件级别的原子操作,该类中均为native方法,连接Java应用程序和操作系统底层的方法, 使用单例模式。不安全的操作集合,通过内存地址存取fields(double-register,single-register)。 两大功能: 绕过JVM,直接修改内存对象 使用硬件CPU指令实现CAS原子操作 */import java.lang.reflect.Field;imp原创 2021-02-15 14:04:29 · 110 阅读 · 0 评论