JavaSE
文章平均质量分 69
主要是关于JavaSE的技术,包括了基础和高级部分
njitzyd
这个作者很懒,什么都没留下…
展开
-
Java中的锁
Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文主要介绍了Java中的锁机制以及常用的锁的实现,以帮助工作中更好的运用。锁是jvm内置的锁,不同于锁。关键字可以修饰方法,也可以修饰代码块。关键字修饰方法时可以修饰静态方法,也可以修饰非静态方法;关键字可以修饰代码块。值得注意的是synchronized是一个对象锁,也就是它锁的是一个对象。因此,无论使用哪一种方法,synchronized都需要有一个锁对象。原创 2023-05-04 23:15:17 · 2185 阅读 · 1 评论 -
Java中的四种引用类型
Java中四种引用类型原创 2023-01-01 17:34:15 · 3852 阅读 · 1 评论 -
关于JDK8中的字符串常量池和String.intern()方法理解
JDK8中的字符串常量池以及String.intern()具体做了什么事情,以及和字符串常量池的联系的解析以及原理思考原创 2022-11-23 21:59:38 · 670 阅读 · 0 评论 -
Java工具ObjectSizeCalculator获取对象内存占用
基本类型 长度 the size of an objectInt 4 16Short 2 16Long 8 24Byte 1 16Character 1 16Float 4 16Double 8 24在JDK1.8中可以采用ObjectSizeCalculator类来计算对象在内存中的大小import jdk.nashorn.internal.ir.debug.ObjectSizeCalculator;imp原创 2021-12-21 22:28:27 · 7146 阅读 · 1 评论 -
Java日期工具-Joda-Time和FastDateFormat
目录[toc]1.基本介绍Java自带日期格式化工具DateFormat ,但是DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐使用joda-time 库 或者使用Apache的 FastDateF原创 2021-12-19 19:37:57 · 2071 阅读 · 0 评论 -
不可变集合ImmutableMap
概述ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对。不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。为什么要用immutable对象?immutable对象有以下的优点: 1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 2.线程安全的:immutable对象在多线程下安全,没有竞态条件 3.不需要支持可变性, 可以尽量节省空间和时间的开销.原创 2021-12-13 22:00:52 · 573 阅读 · 0 评论 -
Java中的可变参数和数组参数
简介Java方法中的可变参数类型是一个非常重要的概念,有着非常广泛的应用。而可变参数和数组参数又有着很大的联系,下面我们看看这两者的对比以及平时如何使用。使用(注意 可变参数必须作为方法的最后一个形参才行)下面是可变参数的一个简单案例:public class TestVarArgus { public static void dealArray(int... intArray) { for (int i : intArray) { System.原创 2021-12-12 19:37:46 · 1799 阅读 · 1 评论 -
Java中的 WeekHashMap(强引用、弱引用、软引用等)
转载自:java中的weekHashMap弱引用转载 2021-12-06 21:55:52 · 306 阅读 · 0 评论 -
反射修改static final
之前认为static final的变量是不可改变的,通过反射也是无法修改的,但是这个变量并不是不可以改变的,这里先给出结论:被static final修饰的 基本数据类型和String是无法通过反射进行修改的,但是其他类型(比如基本类型的包装类)则是可以通过反射改变。演示代码private static void setFinalStatic(Field field, Object newValue) throws NoSuchFieldException, IllegalAccessExceptio原创 2021-11-14 14:48:49 · 2998 阅读 · 0 评论 -
Java中定时任务ScheduledThreadPoolExecutor、Timer、@Scheduled和Quartz
1.简介 在实际应用中,有时候我们需要创建一些个延迟的、并具有周期性的任务,比如,我们希望当我们的程序启动后每隔1小时就去做一次日志记录、每天凌晨12点去清理一下数据库中的过期数据等。在JDK中提供了两种方法去创建延迟周期性任务。分别是ScheduledThreadPoolExecutor和Timer。另外还有一个开源的更加强大的任务调度框架Quartz。下面我们来具体认识这三个框架。2.TimerTimer的主要方法有:// 安排在指定的时间执行void schedule(TimerTask t原创 2021-08-27 00:21:29 · 2035 阅读 · 0 评论 -
并发容器-ConcurrentLinkedQueue详解
转载自:并发容器-ConcurrentLinketQueue转载 2021-08-23 23:12:28 · 110 阅读 · 0 评论 -
Java并行流Parallel Stream与Fork-Join线程池
Fork-JoinParallel Stream实现任务的切分,并将任务提交到全局的ForkJoinPool线程池中执行,注意,是全局的线程池。关于ForkJoinPool,我这里简单介绍下。在Fork-Join中,比如一个拥有4个线程的ForkJoinPool线程池,有一个任务队列,一个大的任务切分出的子任务会提交到线程池的任务队列中,4个线程从任务队列中获取任务执行,哪个线程执行的任务快,哪个线程执行的任务就多,只有队列中没有任务线程才是空闲的,这就是工作窃取。可以这样理解工作窃取,比如有4个人干原创 2021-08-22 23:53:32 · 4642 阅读 · 1 评论 -
Java中的线程池
1.线程池原理有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。线程池的构图如下:整体的执行流程如下:当正在运行的线程小于corePoolSize,线程池会原创 2021-08-19 21:30:35 · 429 阅读 · 0 评论 -
Java中joda日期格式化工具的使用
Java中joda日期格式化工具的使用1.基本介绍Java自带日期格式化工具DateFormat ,但是DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐使用joda-time 库。2.joda-ti原创 2021-01-11 23:59:44 · 260 阅读 · 0 评论 -
Java基础之注解和反射
Java基础之注解和反射注解和反射是很过开源框架底层的实现逻辑底层都是通过注解和反射。1.注解1.1注解入门注解(Annotation)很重要,现在的开发模式都是基于注解的,JPA是基于注解的,从Spring基于注解的,从Hibernate也是基于注解的,注解是JDK1.5之后才有的新特性.注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,原创 2021-01-11 23:58:28 · 179 阅读 · 0 评论 -
Java中生成对象的四种方法
Java中生成对象有四种方法,可以分成两大类,调用构造函数和不调用构造函数。1. 调用构造函数1.1 使用 new 关键字 创建对象这是最简单的方式,也是最常用的方式String str = new String();1.2 使用反射技术Reflection(反射)是动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性和方法。1.2.1 类的字节码文件可以通过下面三种方式获取通过类名获取:类名.class //原创 2020-06-16 22:36:59 · 969 阅读 · 0 评论 -
枚举类型的具体使用细节
自定义枚举enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}#初步使用public class EnumDemo { public static void main(String[] args){ //直接引用 Day day =Day.MONDAY; }}这就是枚举类的初步使用,其实相当于定义了常量,从而使得开发更容易交流。那么枚原创 2020-06-16 21:59:10 · 412 阅读 · 0 评论 -
Comparable与Comparator的区别,附带代码教程
1. 两者对比Comparable和Comparator都是用来实现集合中元素的比较、排序的。Comparable是在集合内部定义的方法实现的排序,位于java.util下。Comparator是在集合外部实现的排序,位于java.lang下。Comparable是一个对象本身就已经支持自比较所需要实现的接口,如String、Integer等基本类型的包装类都自己就实现了Comparable接口,可完成比较大小操作。自定义类要在加入list容器中后能够排序,也可以实现Comparable接口,在用原创 2020-06-15 14:37:59 · 179 阅读 · 0 评论 -
Random和ThreadLocalRandom对比
1. Random类及其局限性一般情况下,我们都会使用java.util.Random来生成随机数(Math.random()也是使用Random实例生成随机数)。1.1 使用案例:public class RandomTest { public static void main(String[] args) { Random random = new Random(); for (int i = 0; i <10 ; i++) {原创 2020-06-14 17:01:11 · 546 阅读 · 0 评论 -
java中关键字static的作用
参考文章转载 2019-06-03 22:53:25 · 121 阅读 · 0 评论 -
Java基础之java中Set、List、Map等集合的详解
概述Set 是接口,继承自collection接口 List是接口,继承自collection接口 Map独立接口 Queue是接口,继承自collection接口Set 接口以及其实现类(不包含重复元素)HashSet :底层数据结构是哈希表。(无序,唯一) LinkedHashSet :底层数据结构是链表和哈希表。(FIFO插入有序,唯一) 1.由链...原创 2019-05-28 23:46:17 · 271 阅读 · 1 评论