Java基础-JDK各版本特性汇总(JDK1.0~JDK18)
参考文献
JRE Version
123456789101112131415161749 = Java 550 = Java 651 = Java 752 = Java 853 = Java 954 = Java 1055 = Java 1156 = Java 1257 = Java 1358 = Java 1459 = Java 1560 = Java 1661 = Java 1762 = Java 1863 = Java 1964 = Java 2065 = Java 21
JDK各版本特性汇总(JDK1.0~JDK18)
JDK版本
发布时间
代号
备注
1
1996年1月23日
Oak(橡树)
初代版本,伟大的一个里程碑,但是是纯解释运行,使用JIT,性能比较差,速度慢
1.1
1997年2月19日
Sparkler(宝石)
JDBC、支持内部类、RMI、反射等等
1.2
1998年12月8日
Playground(操场)
集合框架、JIT等等
1.3
2000年5月8日
Kestrel(红隼)
对Java的各个方面都做了大量优化和增强
1.4
2 ...
Java java.util.Comparator
参考文献
Java stream sorted使用 Comparator 进行多字段排序
java.util.Comparator
1234567891011121314151617List<User> list = new ArrayList<>();// 根据单个字段排序 升序list.sort(Comparator.comparing(User::getName));// 根据多个字段排序 升序list.sort(Comparator.comparing(User::getName) .thenComparing(User::getAge));// 根据单个字段排序 降序list.sort(Comparator.comparing(User::getName, Comparator.reverseOrder()));// 根据多个字段排序 升序list.sort(Comparator.comparing(User::getName, Comparator.reverseOrder()) .thenComparing(Us ...
Java并发源码分析-线程池源码分析
参考文献
AbstractExecutorService源码解析
submit方法
123456789101112131415161718192021222324252627282930public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); // 通过submit方法提交的Callable任务会被封装成了一个FutureTask对象。 // 通过Executor.execute方法提交FutureTask到线程池中等待被执行,最终执行的是FutureTask的run方法; RunnableFuture<Void> ftask = newTaskFor(task, null); execute(ftask); return ftask; } /** * @throws RejectedExecutionException { ...
Java-Cron表达式
参考文献
Spring cron
123456789101112131415161718192021例子: # 每月的最后1天 @Scheduled(cron = "0 0 18 28-31 * ?") public void doAtLastDayOfMonth() { final Calendar calendar = Calendar.getInstance(); if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) { // do something here... } } 说明: Java(Spring) * * * * * * - - - - - - | | | | | | | | | | | +-- ...
IO流-RandomAccessFile
参考文献
RandomAccessFile 解决多线程下载及断点续传
随机访问文件-RandomAccessFile
什么是RandomAccessFile
RandomAccessFile 既可以读取文件内容,也可以向文件输出数据.同时,RandomAccessFile 支持“随机访问”的方式,程序快可以直接跳转到文件的任意地方来读写数据.
由于 RandomAccessFile 可以自由访问文件的任意位置,所以如果需要访问文件的部分内容,而不是把文件从头读到尾,使用 RandomAccessFile 将是更好的选择.
与 OutputStream、Writer等输出流不同的是,RandomAccessFile 允许自由定义文件记录指针,RandomAccessFile 可以不从开始的地方开始输出,因此 RandomAccessFile 可以向已存在的文件后追加内容.如果程序需要向已存在的文件后追加内容,则应该使用 RandomAccessFile
RandomAccessFile基础方法
构造方法
123RandomAccessFile(File file, ...
JDK动态代理源码分析
参考文献
JDK版本
123java 11.0.20 2023-07-18 LTSJava(TM) SE Runtime Environment 18.9 (build 11.0.20+9-LTS-256)Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.20+9-LTS-256, mixed mode)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136/** * Returns a ...
JUC-Collection-PriorityBlockingQueue
参考文献
Java多线程进阶(三四)—— J.U.C之collections框架:PriorityBlockingQueue
PriorityBlockingQueue
PriorityBlockingQueue,是在JDK1.5时,随着J.U.C包引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于堆实现.
PriorityBlockingQueue是一种无界阻塞队列,它具有以下特点:
元素按照权重大小的顺序出队:与其他阻塞队列不同,PriorityBlockingQueue是一种优先级队列。元素不是按照FIFO(先进先出)的方式出队,而是根据元素的权重来确定优先级,权重较小的元素先出队。
无需指定最大容量:与ArrayBlockingQueue不同,创建PriorityBlockingQueue时无需指定最大容量,它是真正的无界队列。它只受系统内存大小的限制,没有预设的最大容量。
元素必须可比较:由于PriorityBlockingQueue是基于元素权重排序的,因此队列中的元素必须可比较。这意味着元素必须实现Comparable接口,以便进行排序。
插入元 ...
JUC Collection-LinkedBlockingQueue
参考文献
Java多线程进阶(三三)—— J.U.C之collections框架:LinkedBlockingQueue
LinkedBlockingQueue
LinkedBlockingQueue是在JDK1.5时,随着J.U.C包引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于单链表实现.
LinkedBlockingQueue除了底层数据结构(单链表)与ArrayBlockingQueue不同外,另外一个特点就是:它维护了两把锁——takeLock和putLock。
takeLock用于控制出队的并发,putLock用于入队的并发。这也就意味着,同一时刻,只能只有一个线程能执行入队/出队操作,其余入队/出队线程会被阻塞;但是,入队和出队之间可以并发执行,即同一时刻,可以同时有一个线程进行入队,另一个线程进行出队,这样就可以提升吞吐量。
属性
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 ...
JUC Collection-ArrayBlockingQueue
参考文献
JUC集合: BlockingQueue详解
ArrayBlockingQueue(基于数组的阻塞队列)
队列的容量一旦在构造时指定,后续不能改变;
插入元素时,在队尾进行;删除元素时,在队首进行;
队列满时,调用特定方法插入元素会阻塞线程;队列空时,删除元素也会阻塞线程;
支持公平/非公平策略,默认为非公平策略。
公平策略,是指当线程从阻塞到唤醒后,以最初请求的顺序(FIFO)来添加或删除元素;
非公平策略指线程被唤醒后,谁先抢占到锁,谁就能往队列中添加/删除顺序,是随机的。
属性
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { /** * 内部数组 ...
JUC Collection-BlockingQueue
参考文献
JUC集合: BlockingQueue详解
BlockingQueue
BlockingQueue是Java中的一个接口,用于在多线程环境下实现线程间的安全数据交换.它通常用于生产者-消费者场景,其中一个线程负责向队列中放入对象,另一个线程负责从队列中取出对象.
在这个场景中,生产线程会不断地创建新对象并将其插入到队列中,直到队列达到其容量上限.一旦队列达到临界点,生产线程在尝试插入新对象时会被阻塞.它会一直等待,直到消费线程从队列中取走一个对象.消费线程则会一直从队列中取出对象.如果消费线程尝试从空队列中提取对象,它也会被阻塞,直到生产线程将一个对象放入队列中.
BlockingQueue的实现类有多种,包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等.不同的实现类有着不同的特性和适用场景,但它们都遵循上述的基本原理.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 ...