
Java SE
文章平均质量分 84
欧阳方超
微信公众号—“欧阳方超”。一份书写一份理解,一份记录一份沉淀,回首时这些是美丽的风景,若能不经意间帮到正在路上的你,吾心备喜焉!Java、Linux运维、大数据。
展开
-
Java并发编程(十八):线程安全的单例模式
Java中实现线程安全的单例模式有多种方法,每种方法都有其优缺点。在选择实现方式时,需要根据具体的需求和场景来决定。原创 2025-03-23 08:30:00 · 297 阅读 · 0 评论 -
Java String(二):字符串操作编译期优化剖析
了解 Java 字符串编译期优化的条件、原理以及不进行优化的情况,有助于我们编写更高效的代码,提升程序的性能和内存使用效率。在实际开发中,我们应尽量利用编译期优化的特性,避免不必要的运行时开销。原创 2025-03-22 21:55:56 · 975 阅读 · 0 评论 -
Java String(一):intern()方法深度解析
Java6及以前,intern()方法在常量池不存在对应字符串时,会在方法区复制新的字符串对象。java7及以后,intern()方法在常量池不存在对应字符串时,会将堆中字符串对应的引用添加到常量池。原创 2025-03-20 09:46:18 · 483 阅读 · 0 评论 -
Java IO(一): Java 中的 IO
Java IO 为开发者提供了强大而灵活的数据处理能力,深入理解和掌握 Java IO 对于编写高效、可靠的 Java 程序至关重要原创 2025-02-19 21:00:00 · 804 阅读 · 0 评论 -
Java并发编程(十七):死锁
本文围绕 Java 死锁展开,介绍其概念为多线程争资源致互相等待,阐述产生死锁的互斥、请求与保持、不可剥夺、循环等待四个条件,并给出示例。还详述预防死锁方法,如锁顺序一致、用 tryLock 设置超时机制及减少锁持有时间,且分别展示了相应的代码改造示例以有效避免死锁情况。原创 2025-01-03 14:30:00 · 1630 阅读 · 0 评论 -
Java并发编程(十六):synchronized公平吗
synchronized作为Java中的内置同步机制,其默认实现为非公平锁。这一设计基于性能考虑和避免饥饿现象,是多线程编程中的一种折中方案。在大多数场景下,其性能优势足以弥补不公平性带来的潜在问题。然而,在需要严格控制执行顺序和资源分配的场合,使用ReentrantLock等其他工具可能更为合适。原创 2025-01-01 18:30:15 · 550 阅读 · 0 评论 -
Java并发编程(十五):读操作是否需要加锁的考虑因素
在多线程环境中,即使是读取操作,也需要通过适当的同步机制(如读写锁)来确保数据的一致性和安全性。ReentrantReadWriteLock 提供了一种高效的方式来处理这种情况,允许多个线程并发读取,同时保证在写入时的独占性。因此,虽然读取操作本身不修改数据,但在并发环境中,为了确保数据的一致性和完整性,仍然需要获取适当的锁。原创 2024-12-30 13:36:36 · 369 阅读 · 0 评论 -
Java并发编程(十四):JDK1.8中的StampedLock
StampedLock是一种灵活且高效的同步机制,特别适合于读多写少的场景。通过结合乐观和悲观策略,它能够有效地提高并发性能,同时避免传统读写锁可能出现的问题,如写饥饿等。在设计多线程程序时,合理运用StampedLock可以显著提升程序效率。原创 2024-12-29 20:48:02 · 623 阅读 · 0 评论 -
Java并发编程(十三):显式锁之ReentrantLock与ReentrantReadWriteLock
本文介绍了 Java 中的显式锁,包括 ReentrantLock 与 ReentrantReadWriteLock。对比了显式锁和 synchronized 的不同,阐述了 ReentrantLock 的特点、使用示例及优势,还介绍了公平锁和非公平锁的区别,最后详细讲解了 ReentrantReadWriteLock 的读写锁机制、使用场景及示例,对多线程同步机制进行了全面阐释。原创 2024-12-28 11:30:00 · 1015 阅读 · 0 评论 -
Java并发编程(十二):只谈blocked、waiting和timed_waiting
Java 线程的 blocked、waiting、timed_waiting 状态各有触发条件与特性。sleep、wait、yield 虽都可让 CPU,但在状态变化、锁处理、调用位置、唤醒方式及使用场景上均有差异,合理运用可优化多线程程序的同步、协作与资源利用。原创 2024-12-20 22:30:00 · 1249 阅读 · 0 评论 -
Java 泛型(一):特性、语法、优势与类型擦除全解析
泛型是 Java 重要特性,提供编译期类型安全机制。可用于定义类、接口与方法,有特定语法和命名规则。其优势包括类型安全、代码复用、免强制类型转换,而类型擦除则出于兼容性、简化 JVM 实现及性能考虑,让 Java 泛型得以有效运行。原创 2024-12-12 14:00:00 · 611 阅读 · 0 评论 -
Java并发编程(十一):monitor中entry set和wait set协作解析
本文介绍了 Java 中的 monitor 概念,包括其定义、与对象关联等。还阐述了 entry set、wait set 的作用、工作流程及与 monitor 的关系,最后给出三者关系图及线程状态转换情况,整体呈现了 Java 线程同步协作机制。原创 2024-12-06 21:45:00 · 862 阅读 · 0 评论 -
Java并发编程(十):synchronized 与 Lock 接口的奥秘
在 Java 多线程编程中,同步机制至关重要。synchronized 关键字是早期实现同步的主要方式,基于对象的监视器锁,其原理是线程在执行被其修饰的方法或代码块时需先获取对应对象的内置锁,执行完毕后自动释放,且提供了等待与唤醒机制来处理线程间协作。原创 2024-12-05 22:15:00 · 732 阅读 · 0 评论 -
Java并发编程(九):CountDownLatch 的介绍和使用
CountDownLatch是Java并发编程中一个非常实用的同步工具,它通过简单的计数机制有效地协调多个线程之间的执行顺序原创 2024-11-27 21:45:00 · 940 阅读 · 0 评论 -
Java并发编程(八):HashMap非线程安全问题解析与应对
通过示例展示了HashMap的非线程安全性,为确保线程安全,介绍了ConcurrentHashMap和Collections工具类两种同步机制,更推荐使用 ConcurrentHashMap,因为它通常是处理 Java 中并发操作的最佳实践原创 2024-11-25 22:30:00 · 1611 阅读 · 0 评论 -
Java并发编程(七):深浅拷贝
在Java中,选择使用深拷贝还是浅拷贝取决于具体需求。如果需要共享某些数据,可以使用浅拷贝;如果希望确保对象之间完全独立,则应使用深拷贝。理解这两种机制对于有效管理内存和避免意外的数据修改至关重要。原创 2024-11-21 20:30:00 · 877 阅读 · 0 评论 -
Java并发编程(六):不可变类与线程安全
介绍创建不可变类需要遵守的原则,通过详细示例介绍了在使用深度拷贝的前提下,不可变类天然具备线程安全性,最后介绍了不可变类的使用场景并介绍其优劣势。原创 2024-11-20 12:15:00 · 1057 阅读 · 0 评论 -
Java并发编程(五):前文示例中加锁与不加锁的解释
介绍了,为什么模拟订单验证无需加锁、模拟订单价格计算无需加锁、模拟发送确认邮件无需加锁,而扣减库存需要加锁。原创 2024-11-19 12:15:00 · 349 阅读 · 0 评论 -
Java并发编程(四):多线程带来的性能飞跃
本文通过一个订单处理的示例,演示了使用多线程能够带来显著的性能飞跃。在实际项目中,通过将任务分解为多个并行执行的线程,能够更好地利用多核处理器的优势,提高系统并发处理能力。原创 2024-11-16 15:00:00 · 943 阅读 · 0 评论 -
Java并发编程(二):同步机制与多线程是否矛盾
既然引入同步机制后,也只能有一个线程执行同步代码块或方法,那这跟只使用一个线程执行任务有什么区别原创 2024-11-12 18:30:00 · 640 阅读 · 0 评论 -
Java中序列化与反序列化(五)——static字段
在Java中,静态字段(static fields)是与类本身相关联的,而不是与类的任何特定实例相关联。这意味着静态字段在类加载时初始化,并且在整个应用程序的生命周期内保持一个唯一的副本。原创 2024-06-18 15:07:30 · 789 阅读 · 0 评论 -
Java异常(二):SneakyThrows注解的使用
@SneakyThrows注解是一个方便的工具,可以简化Java异常处理的代码编写。通过使用它,可以将受检异常转换为非受检异常,减少了冗长的异常处理代码。原创 2023-10-26 06:30:00 · 701 阅读 · 0 评论 -
Java异常(一):自定义异常
自定义异常提供了更具体的错误消息、更灵活的异常处理逻辑以及更好的代码可读性和可维护性。合理地使用自定义异常可以提高Java应用程序的质量和健壮性。原创 2023-10-18 07:00:00 · 2437 阅读 · 0 评论 -
认识两个join()方法
对 Java 中的 String 类和 Apache Commons Lang 库中的 StringUtils 类的 join() 方法进行了功能对比和使用介绍。原创 2023-09-19 06:00:00 · 167 阅读 · 0 评论 -
Java异步编程(一):CompletableFuture初步介绍
大家好,我是欧阳方超。本次就Java中CompletableFuture做初步介绍。这就是CompletableFuture的基本思想,它允许我们提交异步任务,并注册回调,当异步任务完成时,回调会自动触发。我们把一系列的异步任务和回调串联起来,就可以实现复杂的异步流程控制。我们下次见。原创 2023-05-30 21:46:12 · 674 阅读 · 0 评论 -
Java中的内存泄露、内存溢出与栈溢出
内存泄漏、内存溢出和栈溢出都是程序中常见的内存问题,它们都会导致程序运行的异常和不稳定。为了避免这些问题,我们需要在编程中注意及时释放不再使用的资源和对象引用,避免内存分配过多,优化算法和代码结构等。原创 2023-05-01 21:39:04 · 1836 阅读 · 1 评论 -
Java中的序列化与反序列化——Externalizable(三)
Externalizable接口提供了一种比简单的Serializable更灵活和可控的序列化机制。它使您可以在需要反序列化时采取不同的行动,而不是简单地遵循官方的序列化方法。原创 2023-04-30 22:32:28 · 749 阅读 · 0 评论 -
Java中的序列化与反序列化——transient(二)
在Java中,transient关键字用于标记一个类的成员变量,表示这个变量在序列化过程中不需要被保存。这通常用于标记一些敏感信息,例如密码或密钥,以确保它们不会在序列化后泄露原创 2023-04-27 10:06:02 · 759 阅读 · 0 评论 -
Java中的序列化与反序列化(一)
所以,为了避免反序列失败,为序列化类新增属性时,建议不要修改 serialVersionUID 字段的值,当然如果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。关于序列化和反序列化还有很多其他内容,我们择日继续。下回见。原创 2023-04-21 21:59:00 · 764 阅读 · 0 评论 -
Java集合元素中中文的排序
需要说明的是,以上是在List中直接存放多个字符串后进行排序,如果是对象中某个属性是中文,将这类对象放到List中,也是能够进行排序的。原创 2022-11-26 17:46:21 · 2737 阅读 · 0 评论 -
Java交换列表中两个元素的位置-Collections.swap()使用和一次误用
这样写完后代码都提了,转念一想显然是不对的原创 2022-11-25 21:11:28 · 1178 阅读 · 0 评论 -
Java中的方法引用
当想要创建的Lambda体已经有实现方法时,这时可以使用方法引用。Lambda是匿名类的简化写法,方法引用是Lambda的简化写法,如同Lambda表达式创建了函数式接口的实例一样,方法引用也是创建了某个函数式接口的实例。原创 2022-10-30 20:14:17 · 695 阅读 · 0 评论 -
集合与字符串的判空
字符串的判空问题原创 2022-08-26 20:31:48 · 324 阅读 · 0 评论 -
Java反射
@[TOC]反射反射详解reflect所谓反射是运行期间发现更多的类及其属性的能力由于主要是开发软件工具的人员而不是编写应用程序的人员对这项功能感兴趣(核心卷一基础知识中提到的)程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。每个类的运行时reflecthttps://juejin.im/post/6844904047120482318https://blog.youkuaiyun.com/zhengzhaoyang122/article/details/1015606原创 2020-09-16 08:11:36 · 94 阅读 · 1 评论 -
Java中instanceof和isInstance()区别详解
这里写自定义目录标题它们都是用来判断对象的类型的,但是当需要动态地判断对象的类型时instanceof就无能为力了,而isInstance()方法却能发挥作用;instanceof isInstance()方法instanceof是Java中的操作符,其作用是该操作符判断左边的对象是否是它右边类的实例,返回值boolean类型isInstance()是Class类的一个方法public boolean isInstance(Object obj)该方法的作用是在run time判断指定的obj对原创 2020-09-16 08:08:33 · 1129 阅读 · 0 评论 -
Java并发编程(三):让问题暴漏-线程安全问题
介绍了只使用多线程不引入同步机制时可能会出现的数据不一致问题,并展示了通过使用synchronized解决多线程带来的数据不一致问题,synchronized关键字是解决同步问题的最基本手段,后面是陆续介绍,本篇先将线程安全问题暴露出来,毕竟先暴露出问题才能解决问题。原创 2024-11-16 08:30:00 · 1711 阅读 · 0 评论 -
Java操作集合时在for循环中优雅地防御null
操作集合时优雅地防御null1、问题2、解决办法3、总结1、问题在Java中遍历集合时,为了避免出现java.lang.NullPointerException问题,经常需要实现判断集合对象是否为null:if (someList != null) { for (Object temp : someList) { // do whatever }}或者if (someList == null) { return; // Or throw exceptio原创 2020-06-07 17:33:17 · 1651 阅读 · 0 评论 -
正则表达式使用场景
概述正则表达式有很多使用场景,邮箱、手机号、密码强度等的验证,下面是一个可以验证密码是是否同时包含大小写、数字、特殊字符且长度在8至16位的正则表达式,测试、评论和使用。"^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]))^.{8,16}$"...原创 2020-05-07 13:11:00 · 1299 阅读 · 0 评论 -
java中Comparable接口和Comparator接口的使用
把多个对象放进数组,欲对该对象数组进行排序,需要前提条件(若是基本数据类型的数组可直接用Arrays.sort()对其进行排序),要么数组中的对象所属的类实现了Comparable接口并覆写CompareTo()方法,直接执行Arrays.sort(数组)即可排序,要么单独定制一个排序规则类,该类实现comparator接口并覆写compare()方法,执行Arrays.sort(数组, 排序规则原创 2015-12-01 17:51:27 · 694 阅读 · 0 评论 -
java实现字符串逆向输出(续)
这一博文中主要想记录一下,String、StringBuffer、StringBuilder的用法。String类创建的对象不可被改变,StringBuffer创建的对象可被改变,最终的对象可由toString()方法转换为一个String对象;StringBuffer是线程安全的。StringBuilder是jdk1.5新增的类,性能比StringBuffer略高。将单词或句子实现“字母原创 2016-01-12 14:17:19 · 2650 阅读 · 0 评论