java基础增强
文盲青年
天苍苍,野茫茫,女扮男装耍流氓
展开
-
java删除目录及删不掉
【代码】java删除目录及删不掉原创 2023-11-21 15:19:21 · 316 阅读 · 0 评论 -
Java获取文件的sha256值
上述代码中,我们使用 FileInputStream 以字节流的方式逐块读取文件内容,然后通过 DigestInputStream 将读取的数据传递给 MessageDigest 来计算 SHA256 哈希值。这样可以避免将整个文件加载到内存中,而是通过缓冲区逐块处理文件内容。可以通过流式处理逐块读取文件的内容,并在读取的同时计算 SHA256 哈希值,以避免一次性加载整个文件。Java不需要将整个文件加载到 JVM 内存中才能计算文件的 SHA256 值。原创 2023-06-09 14:46:35 · 1307 阅读 · 0 评论 -
利用Map结合Supplier消除switch...case
消除switch...case原创 2023-02-24 18:11:53 · 293 阅读 · 0 评论 -
通过多属性数据传输对象
数据传输对象 多属性原创 2023-01-28 10:24:07 · 104 阅读 · 0 评论 -
Java远程调用RMI
JNDI与RMI使得Java实现了跨JVM的方法远程调用,即服务A可以远程调用服务B的方法。我们一一个服务A,调用远程的另外一个服务为例,具体操作有以下两种:代码在B执行代码在A执行一、原理RMI过程大体如下: 1.客户端从RMI注册表中查询并获取远程对应引用。客户端首先会与Stub进行交互,stub将远程方法所需的参数进行序列化后,传递给远程应用层RRL 2.stub和远程对象具有相同的接口和方法列表,当客户端调用远程对象时,实际是有stub对象代理的。RRL将stub本地引用转换原创 2021-12-11 15:59:07 · 1064 阅读 · 0 评论 -
使用CompletableFuture
TestFuture public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newCachedThreadPool(); CompletableFuture<Integer> cfValue = Completab.转载 2021-10-25 22:11:53 · 86 阅读 · 0 评论 -
Java并发之AQS详解
主要理解独占式、共享式:1、常见并发问题①、可见性:JMM内存模型解决方案:valitile、synchronized、Lock②、有序性:指令重排序解决方案:valitile、synchronized、Lock③、原子性:count++解决方案,synchronized、Lock、AtomicInteger2、加锁逻辑①、线程间互斥,抢占临界资源CAS自旋转,内存中的unsafe的state+1,设置独占线程②、没有抢到的线程存储双向链表,尾结点添加。enq初始化时建立转载 2021-10-24 17:34:35 · 398 阅读 · 0 评论 -
java Queue中 add/offer,element/peek,remove/poll区别
java Queue中 add/offer,element/peek,remove/poll中的三个方法均为重复的方法,在选择使用时不免有所疑惑,这里简单区别一下:1、add()和offer()区别:add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!2、poll()和remove()区别:remo转载 2021-10-21 19:26:48 · 366 阅读 · 0 评论 -
java移除字符串中的表情符
public static String removeNonBmpUnicodes(String s) { return null == s ? null : s.replaceAll("[^\\u0000-\\uFFFF]", ""); }原创 2021-10-14 09:41:38 · 1069 阅读 · 1 评论 -
AtomicInteger原子操作
public class VolatileNoAtomic extends Thread { private static volatile int count; //private static AtomicInteger count = new AtomicInteger(0); private static void addCount() { for (int i = 0; i < 1000; i++) { count++;原创 2021-09-09 10:17:49 · 173 阅读 · 0 评论 -
静态内部类(public static class)和普通内部类(public class)的区别
一、static修饰java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,或者不使用staitc关键字修饰。// 顶层类A不能用static修饰public class A{ // 普通内部类B, 可以不用static修饰 public class B{ } // 普通内部类C, 也可以用static修饰 public static class C{ } }二、引用区别1、静态内部类(s原创 2021-09-08 10:46:57 · 5241 阅读 · 0 评论 -
volatile底层实现原理详解
大家都知道生产中可以使用 volatile 达到保证可见性和指令重排的目的。但是对其实现原理并不是很清楚,为了加深学习和理解感觉很有必要来写篇博客总结一下。JMM—java 内存模型想知道 volatile 实现原理首先得去了下解 JMM,我们都知道 JVM 会为每一个 thread 开辟一块自己的工作空间,在我们操作变量时是从主内存拿到变量的一个副本,然后对副本进行操作后再刷新到主内存中这么一个总体的流程。先简单来看一下如果要改变一个变量值需要经过哪些操作:\1. 首先会执行一个 read 操作转载 2021-07-27 11:49:55 · 346 阅读 · 0 评论 -
集合转数组必须使用集合的toArray(T[] array),传入的是型完全一致、长度为0的空数组的原因
集合转数组,必须使用集合的toArray(T[] array),传入的是型完全一致、长度为0的空数组的原因:说明:使用 toArray 带参方法,数组空间大小的 length:1) 等于 0,动态创建与 size 相同的数组,性能最好。2) 大于 0 但小于 size,重新创建大小等于 size 的数组,增加 GC 负担。3) 等于 size,在高并发情况下,数组创建完成之后,size 正在变大的情况下,负面影响与 2 相同。4) 大于 size,空间浪费,且在 size 处插入 null 值,存原创 2021-07-12 10:09:14 · 628 阅读 · 0 评论 -
使用ArrayList时的坑
原创 2021-07-02 17:28:30 · 118 阅读 · 0 评论 -
java中的SynchronusQueue
SynchronousQueue 是一个不存储元素的阻塞队列。每一个 put 操作必须等待一个take 操作,否则不能继续添加元素。SynchronousQueue 可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合于传递性场景,比如在一个线程中使用的数据,传递给另外一个线程使用,SynchronousQueue 的吞吐量高于LinkedBlockingQueue 和ArrayBlockingQueue。不像ArrayBlockingQueue或Li转载 2021-04-14 19:14:33 · 923 阅读 · 0 评论 -
bytebody增加java类
https://www.cnblogs.com/yungyu16/p/13167240.html转载 2021-01-15 10:15:27 · 463 阅读 · 0 评论 -
AtomicReference使用
AtomicReferenceAtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修改对象引用时的线程安全性。AtomicReference是作用是对”对象”进行原子操作。 提供了一种读和写都是原子性的对象引用变量。原子意味着多个线程试图改变同一个AtomicReference(例如比较和交换操作)将不会使得AtomicReference处于不原创 2021-01-08 10:54:35 · 3739 阅读 · 0 评论 -
使用Fork/Join线程池
https://www.liaoxuefeng.com/wiki/1252599548343744/1306581226487842转载 2021-01-06 11:20:56 · 222 阅读 · 0 评论 -
为什么使用DeferredResult?
https://www.cnblogs.com/theRhyme/p/10846349.html转载 2021-01-04 10:56:56 · 387 阅读 · 0 评论 -
JAVA List remove的坑
List<String> list = new ArrayList<>();list.add("a123");list.add("b123");list.add("c123");list.add("d123");list.add("e123");要移除含有123的错误写法:for(i==0;i<=list.size();i++){ if(list.get(i).contains("123")){ list.remove(i); }}最终会导致还有转载 2020-12-23 17:27:04 · 196 阅读 · 0 评论 -
java.util.Collections.copy():列表List浅拷贝
今天同事问我怎样将一个列表(list1)拷贝到另一个列表(list2),然后修改新的列表(list2)不会影响到旧的列表(list1),想了一想,这是深拷贝啊。可是,除了循环new还有别的办法吗,想了又想,自己也是啥都不懂啊,赶紧百度学习一下,于是就找到了java.util.Collections.copy(),一开始还以为这个是个深拷贝呢,没想到还是个浅拷贝。虽然还没找到深拷贝的方法去解决同事的问题,但还是要学习一下这个浅拷贝,毕竟也是有用滴。先写个单元测试试一下:@Testpublic void转载 2020-11-11 19:19:56 · 834 阅读 · 0 评论 -
java探针agent使用
java agent入门jmx_exporter源码分析转载 2020-09-22 15:21:47 · 673 阅读 · 0 评论 -
增强for循环用法
https://www.cnblogs.com/linjiqin/archive/2011/02/10/1950929.html转载 2020-09-19 16:29:52 · 168 阅读 · 0 评论 -
java中的for(;;)
for(初始化; 判断条件; 执行语句)for语句的语法规定,括号里面一定要有两个分号,分开三个句子。第一个句子是初始化用的,如果没有初始化的必要,就视为空语句,加上分号;第二个句子作为判断条件,如果没有判断条件,也视为空语句,后加一个分号。这种情况,会无限循环,相当于while(1)。如果for的执行部分,就是{}之间有break语句,可以退出;第三个句子是执行部分执行完毕再执行的语句;无则视为空语句;此时不用再加分号。如果三者都为空,那么表示没有初始化,没有判断条件,不执行语句。由没有判断条件原创 2020-09-18 09:58:20 · 18627 阅读 · 6 评论 -
一文彻底理解ReentrantLock可重入锁的使用
https://blog.csdn.net/zhizhengguan/article/details/107321574转载 2020-09-11 14:59:23 · 351 阅读 · 0 评论 -
ArrayList扩容详解
https://blog.csdn.net/qq_38158040/article/details/98227165转载 2020-09-10 17:14:39 · 423 阅读 · 0 评论 -
Java死锁及利用信号量解决方法
https://www.runoob.com/java/thread-deadlock.html转载 2020-09-09 19:43:57 · 181 阅读 · 0 评论 -
Java8之Consumer、Supplier、Predicate和Function攻略
看完上面的实例我们可以总结为几点。① Consumer是一个接口,并且只要实现一个 accept 方法,就可以作为一个“消费者”输出信息。② 其实,lambda 表达式、方法引用的返回值都是 Consumer 类型,所以,他们能够作为 forEach 方法的参数,并且输出一个值。① Supplier 接口可以理解为一个容器,用于装数据的。② Supplier 接口有一个 get 方法,可以返回值。① Predicate 是一个谓词型接口,其实只是起到一个判断作用。转载 2020-09-07 16:23:12 · 754 阅读 · 1 评论 -
Integer的内部小整数缓存
为什么 Java 中“10001000”为false,而”100100“为true?** 这是一个挺有意思的讨论话题。如果你运行下面的代码:Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2你会得到falsetrue基本知识:我们知道,如果两个引用指向同一个对象,用表示它们是相等的。转载 2020-09-02 10:02:00 · 129 阅读 · 0 评论 -
多线程CopyOnWriteArraySet
https://www.cnblogs.com/xiaolovewei/p/9142046.html转载 2020-08-31 19:43:02 · 137 阅读 · 0 评论 -
程序中只有一个main方法不启动任何线程,程序中只会有一个线程吗?
一般来说,JVM会启动多个线程,比如[5] Aattach listener线程//负责接收到外部的命令,而对该命令进行执行的并且吧结果返回给发送者[4] Signal Dispatcher // 分发处理发送给JVM信号的线程[3] Finalizer // 调用对象finalize方法的线程[2] Reference Handler // 清除Reference的线程[1] main // main线程,用户程序入口所以在Java编程领域,即使我们不写多线程,我们依然处原创 2020-08-20 14:11:31 · 419 阅读 · 0 评论 -
CMS发生FullGc分析
fullgc的原因Full GC触发条件:(1)System.gc()方法的调用该方法不一定执行,但是执行的时候是fullgc。(2)老年代空间不足老年代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:java.lang.OutOfMemoryError: Java heap space为避免以上两种状况引起的Full GC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对转载 2020-08-10 09:56:10 · 618 阅读 · 0 评论 -
CountDownLatch的理解和使用
在第一篇文章中遇到了一个CountDownLatch同步计数器,当计数器数值减为0时,所有受其影响而等待的线程将会被激活,这样保证模拟并发请求的真实性。CountDownLatch概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的转载 2020-08-06 12:47:52 · 546 阅读 · 0 评论 -
SimpleDateFormat线程不安全的原因
https://www.hollischuang.com/archives/3017转载 2020-08-06 12:39:08 · 143 阅读 · 0 评论 -
ArrayList中elementData为什么被transient修饰?
java的ArrayList中,定义了一个数组elementData用来装载对象的,具体定义如下:/** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. Any * empty ArrayList with elementData == DEFAULTCAPACITY_E转载 2020-08-05 19:20:00 · 649 阅读 · 0 评论 -
Function接口的使用
https://www.cnblogs.com/rever/p/9725173.html转载 2020-08-01 11:08:15 · 302 阅读 · 0 评论 -
java的深拷贝与浅拷贝及BeanUtils
https://www.cnblogs.com/chywx/p/9574586.html转载 2020-07-29 10:11:51 · 680 阅读 · 0 评论 -
java原生序列化的缺点
大家都在说嫌弃java原生序列化,今天聊聊它到底是因为哪些原因导致大家嫌弃的。首先,序列化详细讲解的可以参考下:java序列化详解java的序列化缺点如下:一、无法跨语言通过Java的原生Serializable接口与ObjectOutputStream实现的序列化,只有java语言自己能通过ObjectInputStream来解码,其他语言,如C、C++、Python等等,都无法对其实现解码。二、序列化码流太大简单做个对比,一个是java原生序列化,一个是通用的二进制编码User对象:i原创 2020-07-17 15:09:24 · 1282 阅读 · 0 评论 -
Groovy的类加载机制
https://blog.csdn.net/ghaohao/article/details/79487703转载 2020-07-16 19:59:05 · 282 阅读 · 0 评论 -
JFrame布局讲解
https://blog.csdn.net/S_999999/article/details/86094856转载 2020-07-13 10:53:14 · 745 阅读 · 0 评论