java
文章平均质量分 68
秋夫人
这个作者很懒,什么都没留下…
展开
-
java.util.TreeMap#firstKey
这段代码通过从根节点开始,沿着左子树一直向下遍历,来找到并返回TreeMap中的第一个条目。这个条目包含了最小的键。如果TreeMap为空,则方法返回null。这是实现TreeMap迭代器和其他相关功能的基础逻辑之一。原创 2024-09-09 23:58:28 · 316 阅读 · 0 评论 -
java.util.TreeMap#tailMap(K, boolean)
通过这个方法,用户可以方便地操作映射的一部分,而不必处理整个映射,这在处理大型数据集时特别有用。这个方法允许用户操作映射的一个特定范围,而不是整个映射。尾部视图包含了所有大于(或等于,取决于。,这个映射包含原映射中所有键大于(或等于,根据。接口的一部分,通常用于有序映射,如。方法的主要目的是返回一个新的。的方法,它是用来获取一个。这段代码定义了一个名为。原创 2024-09-09 23:52:55 · 253 阅读 · 0 评论 -
org.apache.commons.lang.math.NumberUtils#isNumber 解释
循环结束后,代码检查字符串的最后一个字符。如果是数字,返回。原创 2024-08-27 15:23:35 · 741 阅读 · 0 评论 -
java8 Stream mapToLong方法
方法是 Java 中Stream接口的一部分,用于将流中的每个元素通过给定的函数mapper转换成一个long类型的值,并将这些long值组成一个新的LongStream。这个方法主要用于类型转换,特别是当你需要从对象中提取一个long类型的字段或属性时非常有用。原创 2024-08-25 19:32:00 · 235 阅读 · 0 评论 -
idea debug 各个步骤含义
允许你自定义 Debug 窗口中显示的线程信息,例如,你可以选择隐藏某些线程,以便更专注于你感兴趣的线程。原创 2024-08-25 10:35:06 · 905 阅读 · 0 评论 -
Java集合的快速失败机制 “fail-fast”
通过分段锁的策略,实现了高效的并发更新操作,同时允许多线程无锁地进行读取操作。通过写时复制的策略,保证了并发读的高效性,适用于读多写少的场景。这两种集合都避免了快速失败机制,提供了更强的并发性能和数据一致性保证。然而,它们的实现策略也决定了各自的使用场景和性能开销,开发者在选择使用时需要根据实际需求做出合理的决策。原创 2024-08-23 10:35:23 · 359 阅读 · 0 评论 -
Java中有针对基本类型或者引用类型有哪些内部缓存机制
在Java虚拟机(JVM)中,为了提高性能和减少内存使用,对于基本类型和引用类型,实现了一些内部缓存机制。这些缓存机制主要体现在包装类的自动装箱过程中,以及字符串常量池的使用上。原创 2024-08-23 10:24:15 · 252 阅读 · 0 评论 -
Integer a= 127 与 Integer b = 127相等吗
是的,在Java中,和是相等的,但这里需要区分==和equals()方法的区别。Java为Integer类型实现了一个称为整数缓存的机制,这个机制默认缓存了从-128到127之间的整数。当我们使用自动装箱(即将基本类型转换为包装类型)时,对于这个范围内的数值,Java会直接返回缓存中的对象。因此,当我们声明和时,a和b实际上引用了同一个Integer对象。原创 2024-08-23 10:21:46 · 407 阅读 · 0 评论 -
Java 内部类
当一个内部类被编译时,Java编译器会隐式地处理内部类和外部类之间的关系,确保内部类可以访问外部类的成员,包括私有成员。这样,当创建内部类的实例时,就会传递一个外部类的实例给内部类,从而使内部类能够通过这个实例访问外部类的成员。根据其定义和作用域,内部类主要可以分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。对于非静态内部类(成员内部类和匿名内部类),Java编译器会自动为内部类添加一个外部类实例的引用。:使用static修饰的内部类,不需要依赖外部类的实例,不能访问外部类的非static成员。原创 2024-08-23 10:15:12 · 255 阅读 · 0 评论 -
InheritableThreadLocal使用详解
InheritableThreadLocal详解原创 2022-09-18 13:39:05 · 5440 阅读 · 2 评论 -
CGLib动态代理原理
CGLib动态代理原理CGLib动态代理是代理类去继承目标类,然后重写其中目标类的方法啊,这样也可以保证代理类拥有目标类的同名方法;看一下CGLib的基本结构,下图所示,代理类去继承目标类,每次调用代理类的方法都会被方法拦截器拦截,在拦截器中才是调用目标类的该方法的逻辑,结构还是一目了然的;1.CGLib的基本使用使用一下CGLib,在JDK动态代理中提供一个Proxy类来创建代理类,而在CGLib动态代理中也提供了一个类似的类Enhancer;使用的CGLib版本是2.2.2,我是随便找的,不转载 2021-01-07 14:55:36 · 4837 阅读 · 1 评论 -
Json转换工具类FastJsonUtil
pom.xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.44</version> </dependency>FastJsonUtil工具类package com.common原创 2021-01-07 12:47:35 · 984 阅读 · 0 评论 -
JDK动态代理的实现原理
JDK动态代理JDK动态代理是代理模式的一种实现方式,其只能代理接口。使用步骤 1、新建一个接口2、 为接口创建一个实现类3、 创建代理类实现java.lang.reflect.InvocationHandler接口4、 测试被代理的接口:package com.mikan.proxy; /** * @author Mikan * @date 2015-09-15 18:00 */public interface HelloWorld { void转载 2021-01-07 10:42:44 · 142 阅读 · 0 评论 -
记录spring cloud项目线上JVM配置
linux硬盘详情:# df -h Filesystem Size Used Avail Use% Mounted on/dev/vda1 99G 35G 60G 37% /tmpfs 7.8G 0 7.8G 0% /dev/shmlinux 内存详情:# free -h total used free shared buffers cachedMe原创 2020-12-31 15:35:02 · 1010 阅读 · 1 评论 -
Java 原子性CAS 原理 ,atomic包 详解
java.util.concurrent.atomic包类的原理atomic包底层原理都是Unsafe.compareAndSwapXXX()方法,也就是通常说的CAS,compareAndSwapXXX方法是native标识的方法,是Java底层代码,不是Java代码实现的,public final class Unsafe { //object public final native boolean compareAndSwapObject(Object obj, long offset,原创 2020-12-15 14:42:30 · 535 阅读 · 0 评论 -
StampedLock源码详解解析
StampedLockStampedLock 是Java.util.concurrent并发包里JDK1.8版本新增的一个锁,该锁是对读写锁ReentrantReadWriteLock的增强,优化了读锁、写锁的访问,同时使写锁之间可以相互转换,更细粒度控制并发。StampedLock的主要特点概括一下,有以下几点:所有获取锁的方法,都返回一个邮戳(Stamp),Stamp为0表示获取失败,其余都表示成功;所有释放锁的方法,都需要一个邮戳(Stamp),这个Stamp必须是和成功获取锁时得到的Sta原创 2020-11-20 14:16:23 · 645 阅读 · 0 评论 -
AQS 源码解析 - 结合ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier,Semaphor
JDK1.5以前只有synchronized同步锁,并且效率非常低,因此大神Doug Lea自己写了一套并发框架,这套框架的核心就在于AbstractQueuedSynchronizer类(即AQS),性能非常高,所以被引入JDK包中,即JUC。那么AQS是怎么实现的呢?本篇就是对AQS及其相关组件进行分析,了解其原理,并领略大神的优美而又精简的代码。AbstractQueuedSynchronizerAQS是JUC下最核心的类,没有之一,所以我们先来分析一下这个类的数据结构。AbstractQ原创 2020-11-11 21:34:56 · 451 阅读 · 0 评论 -
面试题 - JVM内存结构
JVM内存结构JVM 可以分为 5 个部分,分别是:类加载器(Class Loader):加载字节码文件到内存。运行时数据区(Runtime Data Area):JVM 核心内存空间结构模型。执行引擎(Execution Engine):对 JVM 指令进行解析,翻译成机器码,解析完成后提交到操作系统中。本地库接口(Native Interface):供 Java 调用的融合了不同开发语言的原生库。本地方法库(Native Libraies):Java 本地方法的具体实现。这其中最复杂翻译 2020-10-28 15:05:57 · 752 阅读 · 0 评论 -
面试题 - synchronized 和Lock区别
一、synchronized实现原理Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的class对象同步方法块,锁是括号里面的对象当一个线程访问同步代码块时,它首先是需要得到锁,当退出或者抛出异常时必须要释放锁,那么它是如何来实现这个机制的呢?我们先看一段简单的代码:public class SynchronizedTest { public synchronized void test1(){原创 2020-10-26 13:20:22 · 3248 阅读 · 0 评论 -
面试题 - ThreadLocal详解
目录(jdk1.8)一、什么是ThreadLocal二、ThreadLocal怎么用三、ThreadLocal的原理四、ThreadLocal源码分析1.ThreadLocal的内部属性2.ThreadLocal 之 set() 方法3.ThreadLocal 之 get() 方法4.TreadLocal的remove方法5.内部类ThreadLocalMap的基本结构和源码分析5.1先看成员和结构部分5.2接着看ThreadLocalMap的构造函数5.原创 2020-09-30 17:29:07 · 11241 阅读 · 2 评论 -
面试题 - Java泛型、协变、逆变、类型擦除
Java 泛型之-协变&逆变先说一下java中的协变,逆变,不可变:假设有如下类:class Food{} // 默认继承Objectclass Fruit extends Food{}class Meat extends Food {}class Apple extends Fruit{}class Beef extends Meat{}逆变与协变Java中String类型是继承自Object的,姑且记做String ≦ Object,表示String是Object的子类型原创 2020-09-21 16:44:40 · 802 阅读 · 0 评论 -
面试题 - Java Comparable和Comparator 区别
Comparablepackage java.lang;public interface Comparable<T> { public int compareTo(T o);}Comparatorpackage java.util;public interface Comparator<T> { //必须实现的方法 int compare(T o1, T o2); //选择实现 boolean equals(Object obj)原创 2020-09-15 22:12:11 · 1231 阅读 · 0 评论 -
面试题 - Java序列化和反序列化
Java 序列化的高级认识引言将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识。文章转载 2020-09-15 18:03:22 · 3829 阅读 · 0 评论 -
多线程(获取线程对象以及名称)
/*练习:创建两个线程,和主线程交替运行。原来线程都有自己默认的名称。Thread-编号 该编号从0开始。static Thread currentThread():获取当前线程对象。getName(): 获取线程名称。设置线程名称:setName或者构造函数。*/class Test extends Thread{ //private String name; Test原创 2015-10-13 12:06:15 · 1168 阅读 · 0 评论 -
java内存模型JMM
java内存模型jmm(java memory model)规范,他规范了java虚拟机与计算机内存如何协调工作 ,他规定了一个线程如何及何时看到其他线程修改过的变量的值,以及在必须时,如何同步的访问共享变量。jmm内存分配的概念:堆heap: 优点:运行时数据区,动态分配内存大小,有gc;,缺点:因为要在运行时动态分配,所以存取速度慢,对象存储在堆上,静态类型的变量跟着类的定义一起存储在...原创 2019-01-14 09:21:16 · 23201 阅读 · 4 评论 -
J.U.C-FutureTask
Callable 与Runnable 接口对比Runnable 是个接口,只有一个方法run(),实现Runnable的run(),把要实现的逻辑写到run()中,然后启动线程就行;Callable 代码也很简单,不同的是,Callable 是个泛型接口,call(),返回类型是传入的泛型,Callable 与Runnable大致相似,Callable 功能更强大写,主要是Callable...原创 2019-01-18 12:18:53 · 236 阅读 · 0 评论 -
线程安全性 - 原子性 - 锁 synchronize
原子性 - 锁原子性:互斥性。能保证同一时刻只有一个线程操作的,除了atomic包内的类,另个锁。锁:synchronized, 锁关键字,依赖jvm实现,这个关键字作用对象的作用范围内,同一时刻只能有一个线程操作的,Lock:依赖特殊的cpu指令,代码实现,ReentrantLocksynchronizedsynchronized同步锁,修饰4中对象(1)修饰一个代码块,被修饰...原创 2019-01-12 15:44:44 · 674 阅读 · 0 评论 -
J.U.C之AQS之 ReentrantLock与synchronize区别、ReentrantReadWriteLock、StampedLock
J.U.C之AQS之ReentrantLock与锁ReentrantLock(可重入锁) 与synchronize 区别(1)、可重入性ReentrantLock与synchronize 都具有可重入性,就是同一个线程已经获得了锁,可以再多次获取当前锁,解锁次数要与加锁次数相同,才能释放锁。(2)、锁的实现ReentrantLock 是通过JDK 实现的,synchronize 是JV...原创 2019-01-17 18:39:13 · 578 阅读 · 0 评论 -
Leetcode - java - 24. 两两交换链表中的节点
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1-&gt;2-&gt;3-&gt;4, 你应该返回 2-&gt;1-&gt;4-&gt;3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题(1)、用时 4ms/** * Definition for singly-linked list. * ...原创 2019-01-17 14:04:02 · 490 阅读 · 0 评论 -
Leetcode - java - 206.反转一个单链表 - 图解
题目:反转一个单链表。示例:输入: 1-&amp;amp;amp;gt;2-&amp;amp;amp;gt;3-&amp;amp;amp;gt;4-&amp;amp;amp;gt;5-&amp;amp;amp;gt;NULL输出: 5-&amp;amp;amp;gt;4-&amp;amp;amp;gt;3-&amp;amp;amp;gt;2-&amp;amp原创 2019-01-17 12:01:08 · 798 阅读 · 0 评论 -
并发模拟代码 - CountDownLath、Semaphore
CountDownLatch当前计数器的值为3;线程a 调用了await()方法后,当前线程进入等待状态awaiting;其他线程每次执行countDown()方法时,计数器就会减一,比如:线程1调用countDown()方法,计数器值为2,然后不停的执行,只到计数器为0时,线程a 才继续执行。如图:我们可以看出CountDownLatch是java自带计数器,这个类可以阻塞线...原创 2019-01-11 11:48:22 · 311 阅读 · 0 评论 -
ApacheBench(ab)压力测试工具,安装,用法,参数说明
一、Apache Bench简介ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。二、A...原创 2019-01-10 21:59:52 · 2946 阅读 · 0 评论 -
线程安全性 - 可见性volatile
线程安全性 - 可见性可见性 - synchronize可见性 - volatilevolatile可见性的实现:通过内存屏障和禁止重排序优化来实现;1.volatile变量写操作时,会插入一条store屏障指令(StoreStore和storeLoad),将本地内存中的共享变量值刷新到主内存; (store,load是jmm 指令,参考:https://blog.csdn.net...原创 2019-01-14 09:51:31 · 281 阅读 · 0 评论 -
线程安全性 - 有序性及总结
线程安全性 - 有序性有序性 - happens-before原则(先行发生原则)Java内存模型具有先天的有序性,不通过任何手段,就能得到保证的有序性,称为happens-before原则。如果两个操作的执行顺序无法从本原则推测出来,虚拟机将可随意地对其进行重排序。Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的...原创 2019-01-14 13:48:25 · 2412 阅读 · 0 评论 -
安全发布对象 - 发布与逸出
安全发布对象 - 发布与逸出发布对象:使一个对象能够被当前范围之外的代码所使用对象溢出:一种错误的发布,当一个对象还没有构造完成时,就使他被其他线程所见发布对象这段代码通过public getStates()访问级别发布了类的域states,在类的任何外部线程都可以访问这个域,这样的发布对象是不安全的,因为我们无法保证其他线程是否回对这个域进行修改。从而造成类里面的域的状态错误。(不推...原创 2019-01-14 14:49:07 · 217 阅读 · 1 评论 -
JConsole连接远程服务器方法
jconsole远程连接,必须配置JMX连接参数linux 启动项目时,添加参数java -Djava.rmi.server.hostname=10.160.13.111 #远程服务器ip,即本机ip-Dcom.sun.management.jmxremote #允许JMX远程调用-Dcom.sun.management.jmxremote.port=3214 #自定义jmx 端口号...原创 2019-10-08 14:11:13 · 22727 阅读 · 1 评论 -
springcloud整合(单机)redis哨兵 配置
单机redis ,配置两个哨兵redis:10.100.11.85:6379两个哨兵:10.100.11.85:26379,10.100.11.85:26380pom.xml<!-- redis --> <dependency> <groupId>org.springframework.boot</group...原创 2019-08-13 10:20:20 · 1915 阅读 · 0 评论 -
J.U.C之AQS之 CountDownLatch、Semaphore、CyclicBarrier
J.U.C之AQS - 介绍J.U.C(java.util.concurrent)在jdk1.5引入,引入J.U.C大大提高了java的并发性能,AQS(AbstractQueuedSynchronizer的缩写) 可以认为是J.U.C的核心,AQS 可以说是并发类中的重中之重,AQS 提供了基于firstIn,firstOut队列,这个队列可以用来构建锁或者其他相关的同步装置的基础框架 A...原创 2019-01-16 19:17:11 · 347 阅读 · 0 评论 -
并发容器及安全共享策略总结
并发容器及安全共享策略总结J.U.C指的java.util.concurrent包并发容器 - CopyOnWriteArrayListCopyOnWriteArrayList 相比ArrayList 是线程安全的,根据名称知道:写操作时复制;写操作时拷贝一份,在新的数组上进行写操作,操作完之后,再将原来的数组指向新的数组。(CopyOnWriteArrayList整个add操作都是在...原创 2019-01-16 11:59:55 · 345 阅读 · 0 评论 -
同步容器
线程安全 - 同步容器同步容器 - VectorVector 不是线程安全的执行结果:报错,原因:当一个线程remove(i)时,同时另一个线程get(j), i=j,此时就回报错Vector 遍历同步容器或者普通容器中,test1(),test2(),方法都会抛异常,因为在遍历时进行了移除操作,如果要移除Vector元素,可以先做标识,遍历完之后再进行移除,也推荐直接用fo...原创 2019-01-16 09:28:48 · 217 阅读 · 0 评论