
java
文章平均质量分 64
得过且过的勇者y
万丈高楼平地起,勿在浮沙筑高台
展开
-
Java线程模型
Java程序在JVM上运行,JVM可以运行在不同的操作系统之上,不同的操作系统创建线程的方式是不同的,JVM通过对不同操作系统的原生线程进行抽象,屏蔽了底层不同操作系统的实现方式。(ULT):实现在用户空间的线程称为用户级线程。用户线程是完全建立在用户空间的线程库,用户线程的创建、调度、同步和销毁全由用户空间的库函数完成,不需要内核的参与,也不需要进行用户态和内核态的切换,因此这种线程的。在内核的支持下运行,无论是用户进程的线程,或者是系统进程的线程,他们的创建、撤销、切换都是依靠内核实现的,但是。原创 2024-08-12 16:17:38 · 1320 阅读 · 1 评论 -
Java线程池——Executor框架
这个类适当地扩展了AbstractQueuedSynchronizer,以简化获取和释放围绕每个任务执行的锁。这可以防止中断,这些中断旨在唤醒等待任务的工作线程,而不是中断正在运行的任务。我们实现了一个简单的不可重入互斥锁,而不是使用ReentrantLock,因为我们不希望工作任务在调用setCorePoolSize等池控制方法时能够重新获得锁。此外,为了在线程实际开始运行任务之前抑制中断,我们将锁状态初始化为负值,并在启动时(在runWorker中)清除它。原创 2023-11-11 22:08:17 · 2014 阅读 · 0 评论 -
Java NIO三大核心组件
*因为外部设备的读写设计到操作系统的中断,引入缓冲区可以减少频繁地与设备之间的物理交换,操作系统会对内核缓冲区进行监控,等待缓冲区达到一定的数量的时候(由内核决定,用户程序无需关心),再进行IO设备的中断处理,集中执行物理设备的实际IO操作。NIO中一个连接就是用一个Channel(通道)来表示,一个通道可以表示一个底层的文件描述符,例如硬件设备、文件、网络连接等,除此之外Java NIO的通道还可以更加细化,例如对应不同的网络传输协议类型,在Java中都有不同的NIO Channel实现。原创 2023-10-13 01:55:43 · 406 阅读 · 0 评论 -
Arrays.asList、ArrayList.subList使用规范
因为subList返回的SubList是ArrayList的内部类,并不是ArrayList而是ArrayList的一个视图(在SubList的构造函数中并没有创建一个新的ArrayList),对SubList子列表的所有操作最终会反映到原列表上。在subList场景中,高度注意对父集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生ConcurrentModificationException异常(异常并不是在添加或删除元素时发生的,而是在子集合操作时发生的)原创 2023-03-07 11:43:26 · 452 阅读 · 0 评论 -
Java延迟队列——DelayQueue
DelayQueue是一个无界的BlockingQueue,是线程安全的(无界指的是队列的元素数量不存在上限,队列的容量会随着元素数量的增加而扩容,阻塞队列指的是当队列内元素数量为0的时候,试图从队列内获取元素的线程将被阻塞或者抛出异常)以上是阻塞队列的特点,而延迟队列还拥有自己如下的特点:DelayQueue中存入的必须是实现了Delayed接口的对象。原创 2022-09-04 20:03:40 · 8671 阅读 · 0 评论 -
Java维护常量方式的比较——接口、常量类与枚举
而对于枚举,参数接收的是枚举中定义的静态对象(即传入的就是事先存在的、枚举中的对象),即常量值地址唯一(因为其构造函数是私有的,无法通过外部构造出对象),所以只要比较地址即可。而处于不同地址的两个对象是可以相同的,所以对于常量来说,用户传入的参数是自己写的(新创建的)常量,与常量类中定义的常量显然是不同的对象,所以要比较的是内容是否相同而非地址。每个枚举都是通过Class在内部实现的,且所有的枚举值都是publicstaticfinal的。常量能做的,枚举都能做,枚举能做的常量不一定能做。......原创 2022-07-20 15:45:12 · 1434 阅读 · 4 评论 -
Java序列化与反序列化
Java对象序列化是将实现了Serializable接口的对象转换成一个字节序列,能够通过网络传输、文件存储等方式传输,传输过程中却不必担心数据在不同机器、不同环境下发生改变,也不必关心字节的顺序或其他任何细节,并能够在以后将这个字节序列完全恢复为原来的对象(恢复这一过程称之为反序列化)。在序列化期间,对象将其当前状态写入到临时或持久性存储区。之后可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。.........原创 2022-07-15 18:21:26 · 344 阅读 · 6 评论 -
Java-日期-时间API
文章目录本地日期类LocalDate创建LocalDate对象的方法常用方法本地时间类创建LocalTime对象的方法常用方法本地日期时间类LocalDateTime创建LocalTime对象的方法常用方法Instant类、Duration类、Period类Instant类Duration类Period类其他常用类日期时间解析和格式化时态数据解析时态数据格式化本地日期类LocalDate创建LocalDate对象的方法public static LocalDate now():获得默认时区的系统时钟原创 2021-11-06 19:08:39 · 217 阅读 · 0 评论 -
Java-Junit单元测试
1、测试分类黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值白盒测试:需要写代码,关注程序具体的执行流程2、Junit使用:白盒测试1)步骤定义一个测试类(测试用例)测试类名:被测试的类名Test(如CalculatorTest)包名:xxx.xxx.xx.test(如cn.itcast.test)定义测试方法:可以独立运行方法名:test测试的方法名(如tertAdd)返回值:void参数列表:空参给方法加@Test导入Junit依赖环境2)判定原创 2021-10-24 22:16:19 · 243 阅读 · 0 评论 -
Java-注解
Java-注解文章目录Java-注解1、定义2、作用3、JDK中预定义的注解4、自定义注解5、元注解6、使用(解析)注解7、小结1、定义对比注解:说明程序的,给计算机看的注释:用文字描述的,给程序员看的定义:注解(Anotation)也叫元数据,一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释定义描述JDK1.5后的新特性用来说明程序的使用注解:原创 2021-10-24 22:14:38 · 135 阅读 · 0 评论 -
Java-反射(有图有例子,清晰易懂)
反射:框架设计的灵魂1、概念Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。框架:半成品软件,可以在框架的基础上进行软件开发,简化编码反射:将类的各个组成部分封装成其他对象(Field,Constructor,Method),这就是反射机制好处(见第四点)可以再程序运行过程中,操作这些对象可以解耦,提高程序的可扩展性2、获取Class对象的方式什么是Class类? Clas原创 2021-10-23 21:04:43 · 1551 阅读 · 2 评论 -
Java-PreparedStatement对象
Java-PreparedStatement对象与Statement对象的区别引入PreparedStatement对象是因为使用Statement对象容易被SQL注入,而PreparedStatement对象采用了预编译的方法,会对传入的参数进行强制类型检查和安全检查,进而避免了SQL注入的产生,使得操作更加安全(具体见博客内的文章SQL注入简介)操作方法编写SQL语句 String sql = "select * from users where id = ?"; Strin原创 2021-10-21 22:09:39 · 438 阅读 · 0 评论 -
Java-JDBC操作事务
Java-JDBC操作事务1、开启事务(关闭自动提交则默认开启事务)conn.setAutoCommit(false);2、一组业务执行完毕,提交事务conn.commit();3、可以在catch语句中显示的定义回滚语句,但默认失败就会回滚conn.rollback();示例:package com.test.third;import com.test.second.JdbcUtils;import java.sql.Connection;import java.sql.Prep原创 2021-10-21 21:19:18 · 207 阅读 · 0 评论 -
Java-JDBC编程
文章目录Java-JDBC编程1、加载数据库驱动2、建立与数据库的连接3、向数据库发送SQL命令4、处理数据库返回的结果集5、断开与数据库的连接6、示例Java-JDBC编程使用JDBC连接访问数据库需要经过以下几个步骤:1、加载数据库驱动JDBC是由两部分与数据库独立的接口组成,一部分是面向程序程序开发人员的JDBC API,另一部分是面向底层的JDBC Driver API。而JDBC驱动程序就是由实施了这些接口的类组成,主要用于与数据库服务器交换信息Class.forName("com.m原创 2021-10-12 19:11:20 · 279 阅读 · 5 评论 -
Java-jar包的创建与运行
Java-jar包的创建与运行jar包的概念JAR文件的全称是Java Archive File,意思是Java档案文件。是一种压缩文件,与常见的ZIP压缩文件兼容。两者最大的区别是在JAR文件中默认包含一个名为META-INF/MANIFEST.MF的清单文件,这个文件是生成JAR文件时由系统自动创建的。Java中的许多类其实都是由jar包的形式提供的jar包的生成在某个包中的目录下启动命令行窗口,并输入jar -cvf myfirstjar.jar cn其中myfirstjar为jar包的名转载 2021-10-08 22:26:55 · 5907 阅读 · 0 评论 -
Java-命令行编译和运行带包的程序
命令行编译和运行带包的Java程序若要编译以下文件首先在找到该程序,在该程序所在目录下打开命令行窗口(如下)也可以在其他位置打开命令行窗口,然后根据cd命令切换至程序所在目录(如下)紧接着就可以开始编译了,在命令行中输入:javac -d . Experiment.java以上为编译成功后的命令行窗口和文件夹编译成功后就可以运行该程序,通过输入:java secondepakage.Experiment需要输入完整类名(带包的名字)运行成功,大功告成!...原创 2021-10-08 22:00:02 · 459 阅读 · 0 评论 -
Java-Arrays.sort()方法的比较器
Arrays.sort()有以下重载(此处只展示两种):Arrays.sort(Object[] a);Arrays.sort(T[] a, Comparator<? super T> c);Arrays.sort(Object[] a)此方法看似没有要求我们实现比较器,对于基本数据类型,String类型确实如此,因为这些类型中已经自带了compareTo()方法然而对于我们自定义的类型,则需要让该类实现Comparable接口,重写其中的compareTo()函数否则虽然编译时原创 2021-10-04 14:58:35 · 1674 阅读 · 0 评论 -
Java-比较器升降序问题
Java-比较器升降序问题当我们在使用Java的排序函数时,时常需要自己的需求自定义一个比较器来作为排序的依据而设置的比较器的升序和降序问题是如何决定的呢?先看以下结论:return first.a - second.a表示按升序排序那么为什么会有这样的结果呢?以Comparator接口为例(以下为接口原型)public interface Comparator<T>{ int compare(T first, T second);}我们需要实现其中的compare()方法原创 2021-10-04 14:06:13 · 1107 阅读 · 2 评论 -
Java-包和import
Java-包和importJava包包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类import语句 import语句就是用来提供一个合理的路径,使得编译器可以找到某个类源文件声明规则一个源文件中只能有一个public类一个源文件可以有多个非public类源文件的名称应该和public类的类名保持一致如果一个类定义在某个包中,那么package语句应该在源文件的首行如果源文件包含import语句,那么应该放在packag原创 2021-10-02 16:58:04 · 200 阅读 · 0 评论 -
Java-关于main函数的修饰符(为什么要带public和static)
关于Java主函数的修饰符(为什么要带public和static)public修饰符public是函数的权限,决定了该函数是否可以被外部的函数调用如果改为private,则只能是该main函数所在类的方法可以调用,在其他类中不可见如果改为protected,则只能是子类和同一个包的类可以调用用但是调用main函数的函数所在包和main函数所在包肯定不在同一个包内,所以必须是publicC里面的函数是运行在操作系统环境中的,注意是运行时库调用main函数,但是整个C代码及运行时库都直接在操作系统中原创 2021-10-02 16:40:26 · 1303 阅读 · 0 评论 -
Java-基本数据类型及转换
Java基本数据类型及转换概述 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。类型byte数据类型是8位、有符号的,以二进制补码表示的整数short数据类型是16位、有符号的以二进制补码表示的整数int数据类型是32位、有符号的以二进制补码表示的整数;long数据类型是64位、有符号的以二进制补码表示的整数;float数据类型是单精度、32位、符合IEEE 754标准的浮点数;double数据类型是双精度、64位、符合IEEE 7原创 2021-10-02 15:51:01 · 190 阅读 · 0 评论 -
Java-单例模式简介
Java-单例模式在Java类的设计中,有时希望一个类在任何时候只能有一个实例,这时可以将该类设计为单例模式,要将一个类设计为单例模式,类的构造方法的访问修饰符应声明为private,然后在类中定义一个static方法,在该方法中创建类的对象。如下:public final class Me{ private Me(){} private String name; private static final Me INSTANCE = new Me(); public s原创 2021-09-29 20:50:19 · 157 阅读 · 0 评论