
JavaSE
文章平均质量分 84
Java SE(Java Standard Edition)是Java编程语言的核心和基础平台,适用于开发和部署桌面、服务器以及嵌入式设备的Java应用程序。Java SE提供了完整的开发和运行环境,包括Java编译器、运行时环境、类库和工具,特别是Java虚拟机(JVM)。
MinggeQingchun
这个作者很懒,什么都没留下…
展开
-
Java - List排序
需求:用户有成绩和年龄。按成绩降序排序,若成绩相同,则按年龄正序排序。需求:用户有成绩和年龄。按成绩排序,若成绩相同,则按年龄排序。原创 2024-03-04 21:48:59 · 2404 阅读 · 1 评论 -
Java - List集合与Array数组的相互转换
使用集合转数组的方法,必须使用集合的(T[] array),传入的是类型完全一样的数组,大小就是 list.size()如下代码会报异常:使用工具类 Arrays.asList() 把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。原创 2024-03-03 22:26:28 · 2746 阅读 · 0 评论 -
Java - Stream Filter 多条件筛选过滤
判断完成之后 会拿到所有的boolean值 通过 && 拼接返回,即 有一个为false,即返回值为false。让所有参数默认为 false,然后对传进来的值进行取值判断,若满足该条件为true,多个条件进行多次判断。通过该方法会对一个对象进行多条件过滤。如果需要进行多条件过滤。原创 2023-11-27 22:10:13 · 12612 阅读 · 3 评论 -
Java - NPE(NullPointerException);Optional
空指针异常。原创 2023-10-03 21:41:14 · 637 阅读 · 0 评论 -
Java -- JodaTime第三方库操作时间
Java自带日期格式化工具DateFormat ,但是DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如将 SimpleDateFormat 限制在 ThreadLocal 中。如果不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。所以,通常我们使用第三方库Joda Time来进行时间相关的操作。原创 2023-01-01 21:20:29 · 1777 阅读 · 0 评论 -
JUC - 多线程之 CAS和原子类(九)
比较和交换;体现的是一种乐观锁的思想CAS 用于实现多线程同步的原子指令。它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。这是作为单个原子操作完成的。原子性保证新值基于最新信息计算;如果该值在同一时间被另一个线程更新,则写入将失败。操作结果必须说明是否进行替换;这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)原创 2022-10-24 21:23:39 · 694 阅读 · 0 评论 -
JUC - 多线程之 单例模式(八)
单例模式(Singleton Pattern)是一种非常简单的设计模式之一,当我们使用的对象要在全局唯一时就需要用到该模式,以保证对象的唯一性。除此之外,还能避免反复的实例化对象,减少内存开销单例类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象单例主要有如下创建方式优点:写法简单;避免了线程同步问题缺点:在类装载的时候就完成实例化,没有达到Lazy Loading懒加载的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费 优缺点同上 优点:在使用时才会生成对象原创 2022-10-24 12:00:34 · 435 阅读 · 0 评论 -
JUC - 多线程之JMM;volatile(七)
Java Memory Model(JMM)Java内存模型,区别与java内存结构。JMM定义了一套在多线程读写共享数据(变量、数组)时,对数据的可见性、有序性和原子性的规则和保障。原创 2022-10-22 23:15:26 · 447 阅读 · 0 评论 -
JUC - 多线程之ForkJoin;异步调用CompletableFuture(六)
ForkJoin是在Java7提供的一个用于并行执行任务的框架,ForkJoin 从字面上看Fork是分岔的意思,Join是结合的意思,核心思想就是其实现思想与MapReduce有异曲同工之妙ForkJoin体系中最为关键的就是ForkJoinTask和ForkJoinPool,ForkJoin就是利用分治的思想将大的任务按照一定规则Fork拆分成小任务,再通过Join聚合起来ForkJoin最经典的一个应用就是Java8中的,我们知道Stream分为,其中并行流。原创 2022-10-22 15:33:20 · 1372 阅读 · 0 评论 -
JUC - 多线程之线程池ThreadPoolExecutor(五)
创建线程和销毁线程的花销也是比较大的(手动new Thread 类),创建和消耗线程的时间有可能比处理业务的时间还要长。3、提升系统响应速度,假如创建线程用的时间为T1,执行任务用的时间为T2,销毁线程用的时间为T3,那么使用线程池就免去了T1和T3的时间。1、提高效率,创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2、减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。创建Java线程需要给线程分配。原创 2022-10-21 11:32:07 · 442 阅读 · 0 评论 -
JUC - 多线程之阻塞队列BlockingQueue(四)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端 (front) 进行删除操作,而在表的后端 (rear) 进行插入操作。和栈一样,队列是一种操作受限制的线性表,进行插入操作的端称为队尾,,进行删除操作的端称为对头.在队列中插入一个队列元素称为入队, 从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故。原创 2022-10-20 22:14:12 · 470 阅读 · 0 评论 -
JUC - 多线程之悲观锁、乐观锁,读写锁(共享锁、独享锁),公平非公平锁,可重入锁,自旋锁,死锁(十)
读写锁是一种技术: 通过类来实现为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由 JVM自己控制的读锁(共享锁)允许多个线程获取读锁写锁(独享所)只允许一个线程获取写锁:也叫读锁,可以查看数据,但是不能修改和删除的一种数据锁,加锁后其他的用户可以并发读取,但不能修改、增加、删除数据,该锁可被多个线程持有,用于资源数据共享。原创 2022-10-25 20:55:11 · 1770 阅读 · 0 评论 -
JUC - 多线程之同步辅助CountDownLatch,CyclicBarrier,Semaphore(三)
CountDownLatch的作用:就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以输出如下main线程一直阻塞直到所有的线程执行结束。原创 2022-10-20 20:59:26 · 417 阅读 · 0 评论 -
JUC - 多线程之Callable;集合类线程不安全(二)
Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类设计的。然而Runnable不返回结果,也不能抛出被检查的异常Callable是创建线程的第三种方式,是一个函数式接口使用Callable接口创建线程时,发现Thread中构造方法并没有Callable参数但是Java中提供了一实现Runnable接口的实现类1、Future接口2、FutureTask类。原创 2022-10-19 21:19:52 · 812 阅读 · 0 评论 -
JUC - 多线程之Synchronized和Lock锁;生产者消费者模式(一)
JUC首先,再简单说一下并行、并发;进程、线程。原创 2022-10-17 22:09:41 · 639 阅读 · 0 评论 -
Java--多线程之生产者消费者模式;线程池ExecutorService(五)
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦,如工厂模式的第三者是工厂类,模板模式的第三者是模板类在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。原创 2022-10-12 13:20:00 · 2259 阅读 · 0 评论 -
Java--多线程之synchronized和lock;死锁(四)
在了解synchronized之前,我们先看一个线程不安全的示例如一个账户中有1万块钱,两个人同时取钱,会导致余额不对,或者取的钱比账户中金额还多输出如下t1和t2线程分别在同一个总金额为1万的账户取款 5千,然余额还是5千,这就导致了多线程并发下数据不安全的情况。原创 2022-10-12 13:19:45 · 1371 阅读 · 0 评论 -
Java--多线程之join,yield,sleep;线程优先级;定时器;守护线程(三)
但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;join()方法是Thread 类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行。yield()方法的作用是放弃当前的cpu的资源,将他让给其他的任务去占用cpu执行时间。3、Thread.sleep()方法,可以做到间隔特定的时间,去执行一段特定的代码,每隔多久执行一次。其中具有代表性的就是:垃圾回收线程(守护线程)原创 2022-10-11 22:11:10 · 1022 阅读 · 0 评论 -
Java -- Lambda表达式;函数式接口
Lambda 表达式,也可称为闭包,它是Java 8 发布的最重要新特性Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure)原创 2022-11-25 22:33:52 · 1403 阅读 · 0 评论 -
JVM -- 运行期优化;JIT(九)
JIT:Just In Time Compiler,即时编译器这是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段。Hotspot就有这种技术,Java虚拟机标准对JIT的存在没有作出任何规范,这是虚拟机实现的自定义优化技术。HotSpot虚拟机的执行引擎在执行Java代码是可以采用解释执行和编译执行两种方式的如果采用的是编译执行方式,那么就会使用到JIT,而解释执行就不会使用到JIT。HotSpot中的编译器是javac,它的工作就是将java代码。原创 2022-10-11 21:39:33 · 993 阅读 · 0 评论 -
JVM -- 类加载器;双亲委派机制;线程上下文类加载器(八)
类加载器就是根据类的二进制名(binary name)读取java编译器编译好的字节码文件(.class文件),并且转化生成一个java.lang.Class类的一个实例。每个实例用来表示一个Java类,jvm就是用这些实例来生成java对象的。如new一个String对象;反射生成一个String对象,都会用到String.class 这个java.lang.Class类的对象。基本上所有的类加载器都是java.lang.ClassLoader 类的一个实例。原创 2022-10-11 20:41:00 · 1504 阅读 · 1 评论 -
JVM -- 类加载(七)
将类的字节码载入方法区中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有,如对 String 来说,就是 String.class,作用是把 klass 暴 露给 java 使用如果这个类还有父类没有加载,先加载父类加载和链接可能是交替运行的注:instanceKlass 这样的【元数据】是存储在方法区(1.8 后的元空间内),但 _java_mirror 是存储在堆中 可以通过 HSDB 工具查看。原创 2022-10-10 22:21:18 · 484 阅读 · 0 评论 -
JVM -- 编译器处理;语法糖(六)
语法糖,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成 和转换的一些代码,也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。——百度百科。原创 2022-10-10 20:54:21 · 474 阅读 · 0 评论 -
JVM -- 字节码class文件处理(五)
JVM -- JVM内存结构:程序计数器、虚拟机栈、本地方法栈、堆、方法区(二)JVM -- 垃圾回收(三)原创 2022-10-10 08:49:53 · 1024 阅读 · 0 评论 -
JVM -- 垃圾回收器7种(四)
https://blog.csdn.net/MinggeQingchun/article/details/126947384https://blog.csdn.net/MinggeQingchun/article/details/127066302https://blog.csdn.net/MinggeQingchun/article/details/127089533原创 2022-10-01 21:39:25 · 1676 阅读 · 0 评论 -
JVM -- 垃圾回收;垃圾回收算法(三)
https://blog.csdn.net/MinggeQingchun/article/details/126947384https://blog.csdn.net/MinggeQingchun/article/details/127066302原创 2022-10-01 21:20:51 · 1033 阅读 · 0 评论 -
JVM -- JVM内存结构:程序计数器、虚拟机栈、本地方法栈、堆、方法区(二)
JVM的内存结构大致分为五个部分,分别是。除此之外,还有由堆中引用的JVM外的直接内存。原创 2022-09-30 17:36:36 · 1786 阅读 · 0 评论 -
JVM -- JVM、JDK、JRE(一)
JDK(Java Development Kit)即 Java开发工具包,Java的核心JDK是提供给Java开发人员使用的,JDK是Java程序开发者用来来编译、调试Java程序用的开发工具包,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了,除了包含JRE以外还包含了开发Java程序所必须的命令工具。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等JDK的工具也是Java程序,也需要JRE才能运行。原创 2022-09-28 21:09:14 · 476 阅读 · 0 评论 -
Java-- Map的4种遍历方式
通过Set entrySet()方法获取泛型对象为 Map.Entry 的Set集合,然后使用Iterator迭代器遍历,每次取出 Map.Entry 对象的 key和value。2、单纯的获取key来说,两者的差别并不大,但是如果要获取value,还是entrySet的效率会更好,因为keySet需要从map中再次根据key获取value,而entrySet一次都全部获取出来。keySet获取Iterator一次,还要通过get又迭代一次,降低性能。原创 2022-09-26 21:03:13 · 8166 阅读 · 0 评论 -
Java--Stream流详解
Stream是Java 8 API添加的一个新的抽象,称为流Stream,可以一种声明的方式处理数据stream().filter()一般适用于list集合过滤list中的数据,主要作用就是模拟sql查询,从集合中查询想要的数据,不用像之前一样遍历list再筛选orElse(null)表示如果一个都没找到返回null(orElse()中可以塞默认值。如果找不到就会返回orElse中设置的默认值)orElseGet(null)表示如果一个都没找到返回null(orElseGet()中可以塞默认值。原创 2022-08-30 07:28:40 · 86646 阅读 · 32 评论 -
Java -- double保留两位小数的4种方法
BigDecimal.ROUND_HALF_UP表示四舍五入,BigDecimal.ROUND_HALF_DOWN也是五舍六入,BigDecimal.ROUND_UP表示进位处理(就是直接加1),BigDecimal.ROUND_DOWN表示直接去掉尾数。RoundingMode.HALF_DOWN表示 五舍六入,负数先取绝对值再五舍六入再负数,RoundingMode.HALF_UP:表示四舍五入,负数先取绝对值再五舍六入再负数。...原创 2022-12-01 15:25:21 · 30133 阅读 · 0 评论 -
Java -- JDK中SPI机制
(),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件Java SPI是一种以接口为基础,使用配置文件来加载(或称之为服务发现)的动态加载机制,主要使用JDK中来实现SPI是一种动态替换发现的机制,比如有个接口,想运行时动态的给它添加实现,只需要添加一个实现。原创 2022-09-06 22:08:59 · 2297 阅读 · 0 评论 -
Java--反射机制
一、反射以下引自http://c.biancheng.net/view/6907.htmlJava反射机制是 Java 语言的一个重要特性。在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期。编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作,比如检查错误。运行期是把编译后的文件交给计算机执行,直到程序运原创 2022-03-18 23:13:52 · 534 阅读 · 0 评论 -
Java--多线程之并发,并行,进程,线程(一)
以下对并发、并行、进程、线程的理解引自 阿里巴巴技术专家HollisJava并发编程一、并发并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。无论是Windows、Linux还是MacOS等其实都是多用户多任务分时操作系统。使用这些操作系统的用户是可以“同时”干多件事的二、并行并行(Parallel),当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进.原创 2022-03-12 20:40:50 · 3082 阅读 · 0 评论 -
Java--比较日期大小
返回正值代表左侧日期大于参数日期,反之亦然。需要比较两个日期的大小,有如下三种方法。Date和String互转。注:日期格式必须一致。原创 2022-12-01 15:25:53 · 19539 阅读 · 0 评论 -
Java--多线程之终止/中断线程(二)
Java 中有以3 种方法可以终止正在运行的线程:1、使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止2、使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用3、使用 interrupt() 方法中断线程(只是中断线程执行,终止线程的睡眠(唤醒),并未终止线程)1、标志位定义一个boolean型的标志位,在线程的run方法中根据这个标志位是true还是false来判断是否退出/** * 使用标志位终止线程 * */public c原创 2022-03-13 16:01:32 · 3335 阅读 · 0 评论 -
Java--IO流;File类;文件、目录拷贝;序列化与反序列化;Properties
一、IO流IO流用来处理设备之间的数据传输数据传输是需要通道的,而IO流就是数据传输的通道;因此IO流可以形象的比喻为运送货物的传输带I : InputO : Output通过IO可以完成硬盘文件的读和写二、流分类1、按流向输入流 和 输出流以内存作为参照物,从外部读取到内存中,叫做输入(Input),读(Read)到内存;如:InputStream从内存中读取出来,叫做输出(Output),写(Write)进硬盘;如:OutputStream2、按操作的数据类原创 2022-03-06 19:49:35 · 513 阅读 · 0 评论 -
Java--Collection和Map集合
一、Collection二、Map原创 2022-02-19 21:59:48 · 2986 阅读 · 3 评论 -
Java-数组和链表(ArrayList和LinkedList)
一、数组和链表1、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。2、链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起比如:上一个元素有个指针指到下一个元原创 2022-03-02 22:07:29 · 2576 阅读 · 0 评论 -
Java--LinkedList集合,链表
一、LinkedListLinkedList 继承了 AbstractSequentialList 类,实现了 List 接口,可进行列表的相关操作LinkedList 实现了 Queue 接口,可作为队列使用。LinkedList 实现了 Deque 接口,可作为队列使用。LinkedList 实现了 Cloneable 接口,可实现克隆。LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输public class L.原创 2022-02-19 12:22:43 · 536 阅读 · 0 评论