java
文章平均质量分 71
noodles_mee
任何不能拿到关键结果的努力都是半途而废,
展开
-
Lock用法和加锁原理
note: 1)加锁语句lock.lock();catch语句中发生的,这两个部分可能发生的异常不影响finally执行。synchronized同步机制是依赖JVM实现,Lock主要依赖抽象队列同步器(AbstractQueuedSynchronier,AQS)实现的,AQS是一个双向链表,使用一个整型变量state表示对共享区域的加锁状态,对于每个尝试访问临界区的线程都会被封装成双向链表中的一个节点,主要通过tryacquired获取临界区访问权,通过tryrelease释放临界区访问权。原创 2023-05-09 22:45:35 · 468 阅读 · 1 评论 -
使用本地缓存+全局缓存实现小型系统用户权限管理
缓存实现用户权限管理。原创 2022-07-26 00:17:41 · 103 阅读 · 0 评论 -
Java 异常概念介绍和使用
***年龄合法性异常类,继承了受检查异常,在抛出和捕捉该异常的地方都要进行声明super(msg);} } * * * 手机号合法性异常,继承运行时异常,可以不用捕捉,jVM会自动捕捉 * / class InvalidPhoneException extends RuntimeException {super(msg);} } 两个测试类 public class User {return age;原创 2022-02-08 01:33:26 · 581 阅读 · 0 评论 -
equals与==的区别
目录equals与==的区别为什么HashMap两个不同的对象的可能映射到同一个位置?为什么不直接使用对象内存地址哈希映射值?equals与==的区别1、一个对象的hashCode取是对象在JVM保存的值,不同的引用对象分配堆的位置不一样,hashCode一定不同。2、== 比较引用对象,比较的是两个对象hashcode 值, == 比较两个常量总是指向常量池中同一个对象,所以总是相同的。3、 在不重写hashcode 和equals情况下,Object对象equal底层也是== 实现,比较两个对原创 2022-02-04 01:16:11 · 155 阅读 · 0 评论 -
I/O分类和作用
目录I/O作用I/O分类JAVA I/0 分类(BIO)JDK 1.4 引入Nio包和原来IO区别NIO中三个核心组件-channel、buffer、selctorNIO包中常见的channel缓冲区选择器selectorAIO模型I/O作用I/O通信指的是将数据从数据源传输到接收端。I/O分类JAVA I/0 分类(BIO)JDK 1.4 引入Nio包和原来IO区别IO和NIO读取数据方式流程IO和NIO读取数据原理图IO和NIO模型对比NIO从channel向buffer原创 2022-01-24 01:29:01 · 893 阅读 · 0 评论 -
java类加载器机制
这里写自定义目录标题java类加载过程类加载器分类和作用为何要打破双亲委派机制思考和疑问java类加载过程类加载器将A类的字节码文件,加载到JVM内存,首先将A的类信息存放在方法区,并且在堆中创建一个A类的java.lang.class对象,提供对方法区A类信息访问的入口。A类信息包括:(1)类接口信息例如名,权限修饰符。(2)类的静态变量,存储在静态区。(3)类的静态方法,存储在静态区。(4)类的非静态方法,存储在非静态区。(5)代码块,存储在静态区。(6)类的构造函数,存储在静态区。原创 2022-01-22 13:53:15 · 271 阅读 · 0 评论 -
java并发编程安全性问题和对应解决办法
java并发编程安全性问题和对应解决措施原创 2022-01-20 22:08:50 · 490 阅读 · 0 评论 -
AQS源码解读
AQS抽象队列同步器(Abstract Queued Synchronizer,AQS)作为并发包JUL中一个基础组件,用来实现各种锁和同步组件,AQS主要由状态state变量、加锁线程和等待队列组成。AQS定义了多线程访问共享资源的框架,AQS定义了Exclusive(Reentrantlock)和share(Semaphore和CountDownLacth)两种资源共享方式,在不同的组件中都有基于AQS的自定义同步器,不同的自定义同步器主要区别在获取state的方式不同。AQS内通过一个FIFO队.原创 2021-07-26 22:21:24 · 1649 阅读 · 2 评论 -
Maven入门
Maven是Apache旗下一款近面向java项目的管理工具,主要是用来自动下载工具包、管理包间依赖、和工具包版本的工具,Maven官网https://maven.apache.org/index.html。Maven相关概念。Maven目录结构。Maven命令Maven应用4.1 Maven安装和配置4.2 IDEA 中配置Maven4.3 使用Maven创建普通的Java项目和web项目1. Maven相关概念1) POM:项目对象模型(Project object Model,P原创 2021-07-07 21:21:06 · 124 阅读 · 0 评论 -
java反射
手动编写的对象都会创建一个Class对象,对象中的所有属性都封装在Filed[] 数组中,所有方法都封装在 Method[] 数组中,所有构造函数都封装在 Constructor[] 数组中,通过反射可以在程序运行过程中,确定一个对象的类,找出一个成员变量(Filed),成员方法(Method)和构造函数(Constructor),包括从父类中继承的变量和方法,主要应用在框架中。因为Class对象的构造函数是私用的,所以只能通过JVM创建和加载。反射的缺点主要有两个,第一反射中包括一些动态类型,所以JVM无翻译 2021-06-08 12:10:13 · 91 阅读 · 0 评论 -
类初始化和实例初始化过程
类初始化过程只在类被加载过程中执行一次,每创建一个对象都会存在实例化过程。下面为尚硅谷紫林燕老师有关类初始化和实例初试化的的一个例子。/**类加载过程中操作 * 加载main方法所在类 * 1.子类存在父类,则会先先加载父类 * 2.执行<clinit方法> * clinit方法由静态变量显示赋值和静态代码块 * 执行顺序从上到下 * clinit加载一次只会执行一次 * * *实例初始化过程 * 1.执行<init>方法 *原创 2021-05-31 21:32:15 · 95 阅读 · 0 评论 -
JAVA String类的疑难点
1.String存放位置和GC Jdk1.7之前常量池在方法区,jdk1.7及以后移动到堆区。Str.intern()会判断字符串常量池中是否有该对象,若果没有则将在常量池中创建该对象,并返回常量池中创建对象的引用;如果有则直接返回该对象引用。当内存充足的时候,字符串常量池对象不会被回收,当内存不足的时候,字符串常量池中内容会被回收。2.String 长度限制 String长度理论上没有限制,实际有限制,限制主要体现在底层实际存储String类型的容器上和String构造函数上。1)String原创 2021-05-19 16:38:08 · 124 阅读 · 0 评论 -
Intelliji IEAD中导入JDK源码
JDK源码位于 JDK安装目录下的src.zip安装目录下,Intelliji导入JDK源码主要包括两步[1-6]。1.第一步创建一个空的普通java项目,并创建一个测试类。2.第二步为将解压src.java解压文件拷贝到空项目的src目录下。 第一步:打开IDEA,创建一个普通的java项目,并创建一个测试类Main.java。第二步:将src.zip解压得到的所有源码拷贝到新创建项目的src目录下(只要拷贝到“source root”类型目录下就行,不然会因为类中包名报错[7,原创 2021-05-15 12:13:25 · 581 阅读 · 0 评论 -
Java8新特性
Java8新特性 相比于Java7及之前,Java8中新增加的特性使得Java代码更加简洁,程序员开发更加高效,有得必有失,太过简洁的代码增加了后期阅读和维护的困难。考虑java8的语法使得java本身语法发生了很大改变,即使在开发中不适用java8,为了后面技术学习和交流,有必要熟悉java8对现有java中的影响。java8中的新特性主要包括一下几个方面[1]。1. Lambda表达式2. 方法引用与函数构造3. StreamAPI4. 接口中默认方法与静态方法5. 其它新特性1. L.原创 2021-05-11 16:52:09 · 119 阅读 · 0 评论 -
JVM运行时数据区、JVM内存划分和JVM虚拟机架构三者区别和联系
JVM运行时数据区指的时当JVM运行时会出现哪些区域,侧重于了解各个区域创建的时机;JVM内存区域划分是指JVM内存分为哪些区域,侧重于各个区域的作用,是同一块内容从两个角度进行看待。图1和图2分别为JVM运行时数据区和JVM内存区域划分的实例图。图1JVM运行时数据区图2JVM内存区域划分 观察图1和图2,图1只是比图2更加详细,本质还是同一个东西。1.方法区 存储了类结构信息,例如字段方法数据、构造函数和普通方法字节码内容还有运行时常量区,随着JVM的创建和停止而开始和结束。2.堆区原创 2021-04-29 15:56:15 · 173 阅读 · 2 评论 -
神奇的补码
引言 计算机中有符号数有原码、真值和补码三种表示形式,计算机系统中的数值都是由补码表示。原码是真值的二进制表示,例如5对应的八位二进制表示为00000101,5 是我们真实世界中看到的真值,00000101真值对应原码。计算机中数值使用数值表示的好处有。简化运算,将减法化成加法计算,并且可以直接将符号位进行运算。原码和补码之间的转化简单,这也是为什么不使用反码的原因。 下面通过3个例子说明计算机中使用补码可以简化运算,3个例子依次是“正数+正数”,“正数-正数”,“负数+负数”,其它类型都可原创 2021-04-24 16:23:07 · 123 阅读 · 0 评论 -
equals用法
引言equals()是定义在Object.java中的一个方法,用于比较两个对象否相等。本文主要讨论内容如下。equals和“==”区别重写equalsequals和“==”区别 equals 和“==”都用于比较两个对象是否相等。区别有两点,第一,equals是一个方法,“=="而是一个运算符;第二,“==”只能用于比较两个对象的在内存中的地址是否相同,equals既可以根据内存地址判断两个对象是否相同,还可以根据对象内容判断是否相等。equals的两种判定方式对应两种实现方法,第一种,O原创 2021-04-24 11:02:23 · 14462 阅读 · 2 评论