
java基础
文章平均质量分 60
java基础知识
FLGB
这个作者很懒,什么都没留下…
展开
-
SPI机制
当服务的提供者提供了一种接口的实现之后,需要在**classpath下的META-INF/services/**目录里创建一个以服务接口命名的文件,这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候,就可以通过查找这个jar包(一般都是以jar包做依赖)的META-INF/services/中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。确保在编译和运行时正确设置类路径,以便能够找到服务提供者的实现类。原创 2023-11-07 17:50:44 · 142 阅读 · 0 评论 -
Java Optional简介和使用
Java 8引入了Optional类,它是一个容器,可以包含一个可能为null的值,有助于处理值可能存在或不存在的情况,避免空指针异常。以下是如何在Java中使用Optional的简要介绍。原创 2023-10-07 16:18:23 · 2850 阅读 · 0 评论 -
Java基于反射和动态代理实现Hook(钩子)功能
在Java中,可以通过反射和动态代理实现Hook(钩子)功能,使程序能够在特定的时间点插入自定义代码,以实现定制化的逻辑。Hook功能常用于AOP(面向切面编程)或拦截器等场景。原创 2023-09-26 17:29:36 · 2166 阅读 · 0 评论 -
在序列化、反序列化下如何保持单例(Singleton)模式
在 Java 中,当一个对象被序列化后再被反序列化,通常情况下会创建一个新的对象实例。在这个过程中,通常会使用类的构造函数创建一个新的对象,并将保存的状态设置给这个新对象。这意味着,默认情况下,在序列化和反序列化过程中,会产生新的对象实例,而不是保持原有的对象实例。解决上述代码的这个问题,可以在类中实现 readResolve() 方法,确保在反序列化时返回同一个对象实例,从而维护对象的单例特性。枚举类的实例创建是线程安全的,而且枚举类不会被反射破坏,并且可以处理序列化和反序列化,保证了单例模式的可靠性。原创 2023-08-11 15:39:13 · 1431 阅读 · 0 评论 -
Java String的intern()方法
如果存在,那么 intern() 方法返回常量池中的引用,如果不存在,它会将当前字符串添加到常量池中,并返回这个新添加的引用。通过使用 intern(),你可以节省内存,因为相同内容的字符串在常量池中只会存储一份。String.intern() 是 Java 中的一个方法,它用于将字符串对象添加到字符串常量池中,并返回一个指向常量池中该字符串的引用。示例中,str1.intern() 方法将会返回常量池中的引用,而 str2.intern() 会找到已经在常量池中的引用。原创 2023-08-11 15:17:31 · 298 阅读 · 0 评论 -
java并发中的同步器
是 Java 并发包中的同步器之一,用于实现一组线程在达到一个共同点之前等待彼此,并在达到共同点后继续执行。是 Java 并发包中的同步器之一,用于实现一种等待机制,允许一个或多个线程等待其他线程完成一组操作后再继续执行。当许可证数量为零时,线程需要等待,直到其他线程释放许可证。在上述示例中,我们创建了一个 CyclicBarrier 实例,初始化等待的线程数量为 3,并设置了栅栏动作。然后创建多个线程,每个线程模拟执行任务后等待其他线程达到栅栏点,当所有线程都达到栅栏点时,栅栏动作会被执行。原创 2023-08-08 19:05:24 · 588 阅读 · 0 评论 -
java并发ForkJoinPool
框架是 Java 并发库中用于实现分治任务并行处理的工具。它基于 “工作窃取”(work-stealing)算法,可以将一个大任务拆分成多个小任务,并利用多线程进行并行处理。() 方法中,我们将任务拆分成两个子任务,并使用 fork() 和 join() 方法进行处理。在上述示例中,我们创建了一个。,用于计算斐波那契数列。提交任务并获取结果。原创 2023-08-08 18:24:50 · 218 阅读 · 0 评论 -
java并发中批量任务的同步和管理
自定义线程池@Slf4j//机器核数0L,(1000),@Overridereturn t;ExecutorCompletionServiceExample使用自定义线程池// 提交一些任务i原创 2023-08-08 16:42:58 · 722 阅读 · 0 评论 -
java并发下如何使用SimpleDateFormat 和Random
ThreadLocalRandom是Java 7引入的,是ThreadLocal的变体,它为每个线程提供了一个独立的随机数生成器实例,从而避免了竞争,提高了性能。Java中的java.util.Random类是线程安全的,因为它的方法在多线程环境下是同步的。但是,如果多个线程需要等待共享的随机数生成器,这会导致性能问题,因为同步会导致竞争和等待。如果多个线程同时调用getDate方法,结果可能很混乱, 因为 dateFormat 使用的内部数据结构可能会被并发的访问所破坏,并不是并发安全的。原创 2023-08-04 14:35:26 · 141 阅读 · 0 评论 -
Java 比Automic更高效的累加器
与AtomicLong相比,DoubleAdder在高并发环境下能够提供更好的性能,因为它采用了分散(Striped)的设计,将内部的数据分为多个独立的单元进行累加,减少了竞争,从而提高了吞吐量。DoubleAccumulator也用于高效处理double类型的累加操作,不同的是它可以自定义累加的逻辑。compareAndSet 方法是 AtomicReference 类的原子操作方法,它会比较当前值是否与期望值相等,如果相等,则更新为新的值。如果当前值与期望值不相等,那么更新操作失败,线程需要重试。原创 2023-08-04 14:04:03 · 557 阅读 · 0 评论 -
Java 线程虚假唤醒问题
虚假唤醒可能是由于操作系统或Java虚拟机的实现原因造成的。在某些情况下,线程可能会在没有明确通知的情况下从等待状态返回,而这并不是因为条件满足。虽然Java虚拟机通常会努力避免虚假唤醒,但程序员应该准备好处理这种情况。是指在多线程编程中,等待的线程在没有收到signal()或signalAll()通知的情况下,也可能被唤醒。这种情况是可能发生的,尽管在理论上不太常见。循环来检查条件是否满足,并在条件不满足时继续等待。这是因为虚假唤醒可能会导致线程在条件不满足时过早地继续执行,从而导致程序逻辑错误。原创 2023-08-04 11:23:57 · 458 阅读 · 0 评论 -
java InterruptedException 异常中断
当一个线程在被阻塞状态(如调用 Thread.sleep() 或 Object.wait() 方法)时,如果其他线程调用该被阻塞线程的 interrupt() 方法,那么被阻塞线程会被中断,并抛出 InterruptedException 异常。被中断的线程需要在适当的时候检查自己是否被中断,并做出相应的响应。4、此时,被阻塞线程可以选择如何处理这个异常,比如捕获异常并做相应的处理,或者继续向上层抛出异常。,它会检查自己是否被中断,如果被中断,就会抛出 InterruptedException 异常。原创 2023-08-03 17:02:25 · 405 阅读 · 0 评论 -
Java并发concurrent
Java的并发包concurrent是构建高效、可伸缩和稳健的多线程应用程序的重要工具集,同时有效地管理并发编程的复杂性。然而,了解并发编程的原理,并谨慎地使用这些工具以避免常见问题(如竞态条件和死锁)是至关重要的。原创 2023-08-03 12:25:51 · 154 阅读 · 0 评论 -
Java数组集合转换
【代码】Java数组集合转换。原创 2023-08-02 16:11:44 · 91 阅读 · 0 评论 -
Java反射获取类所有方法、属性
【代码】Java反射获取类所有方法、属性。原创 2023-07-25 16:10:11 · 922 阅读 · 0 评论 -
Java集合自定义去重对象
在一些业务场景中,比如在集合中取重对象,需要根据业务自定义集合重复的判断标准。比如,根据年龄作为对象重复的判断条件,这时候我们就需要手动重写 hashCode() 和 equals()@Data} }测试代码// 1. 对象的相等性测试 System . out . println("person1.equals(person2): " + person1 . equals(person2));原创 2023-07-25 16:05:38 · 213 阅读 · 0 评论 -
java对象排序
Student{name=‘张0’, age=0}Student{name=‘张1’, age=1}Student{name=‘张2’, age=2}Student{name=‘张3’, age=3}Student{name=‘张4’, age=4}Student{name=‘张5’, age=5}Student{name=‘张6’, age=6}Student{name=‘张7’, age=7}Student{name=‘张8’, age=8}Student{name=‘张9’, age=9}原创 2023-07-25 15:04:02 · 108 阅读 · 0 评论 -
将集合元素转成逗号拼接的字符串
在这个例子中,我们创建了一个List集合并向其中添加了几个字符串元素。然后,使用String.join()方法将集合元素转换为以逗号分隔的字符串。输出结果将是:“Apple,Banana,Orange”。你可以根据需要替换list变量和分隔符参数来适应不同的集合和分隔符。原创 2023-05-24 10:34:09 · 1349 阅读 · 0 评论