
java
文章平均质量分 83
com.li
It works on my machine
展开
-
Java同步代码块、线程的生命周期、同步方法、Lock锁、死锁、线程中常用的方法
要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的。原创 2024-02-10 20:30:00 · 514 阅读 · 0 评论 -
java多线程的四种创建方式、程序、线程、进程、并行、串行、Thread、Runnable、Callable、线程池技术
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。(现在的服务器都是多核的)一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。Java的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或子类的实例。现代的操作系统,大都是支持多进程的,支持同时运行多个程序。程序是静态的,进程是动态的 如:运行中的QQ,运行中的MP3播放器。提高应用程序的响应。原创 2024-02-09 17:38:41 · 802 阅读 · 0 评论 -
JDBC多表联查
在进行多表联查时会遇到第一个问题就是在实体类中不存在从表的字段,紧接着第二个问题在就是主表与从表的对应关系是一对一还是一对多关系。在单一表进行查询时,只需要对表中的单个字段进行解析即可;以学生和班级表为例:从图中可以看出表对应关系。原创 2024-01-10 23:20:21 · 722 阅读 · 0 评论 -
MySQL连接池、C3P0、Druid德鲁伊连接池技术
druid的一个jar包。c3p0两个jar包。原创 2024-01-09 22:19:22 · 682 阅读 · 0 评论 -
JVM类加载机制之加载过程,加载、验证、准备、解析、初始化 持续更新中
在JVM虚拟机实现规范中,通过classLoader类加载器把*.class字节码文件(文件流)加载到内存,并对字节码文件内容进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的java.lang.class 对象,这个过程被称作类加载。 类是在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。原创 2023-11-28 09:59:33 · 472 阅读 · 0 评论 -
JVM基本组成(持续更新JVM),详细
前4个字节非常特殊,其中1~2字节为cafe babe是詹姆斯高斯林定义的魔法数,他的作用是标志当前文件是一个字节码文件,当JVM进行类的加载的Load阶段时,如果没有识别到该标志,就说明不是字节码文件或者被损坏的字节码文件,因此无法进行加载。如果是热机状态,正常情况下,集群中的一半的机器可以勉强支撑负载流量,但由于刚启动的JVM均是解释执行,还没有进行热点代码统计和JIT动态编译,导致机器启动之后,当前1/2发布成功的服务器马上全部宕机。通常把CPU处理器与操作系统构成的系统架构,称为计算机平台。原创 2023-11-26 18:55:13 · 129 阅读 · 0 评论 -
java ArrayList、LinkedList、Set、Map等扩容方式,及其源码分析
当使用空参构造器进行初始化时,起始长度为0,当开始添加进第一个元素后,底层就会分配长度为10的空间,当存储第十一个时就会按照原来的长度的1.5倍进行扩容,也就是15,以后每次扩容都是按照之前按的1.5倍进行扩容,数组的最大容量在Integer.MAX_VALUE-8至Integer.MAX_VALUE之间,如果超出,则抛出OutOfMemoryError错误。实现的子接口有两个:①List接口,用于存储有序的、可重复的数据(可以想象成动态的数组)②Set接口,存储无序的、不可重复的数据(类似于高中的集合)原创 2023-08-17 14:03:54 · 595 阅读 · 3 评论 -
Set、hashCode和equals等
过滤的原理是当我们向Set集合中添加元素时,Set会根据元素的hashCode()方法和equals()方法来判断元素是否重复。也就是说,当我们向Set集合中添加元素时,Set会首先调用要添加元素的hashCode()方法获取其哈希码,然后与已有元素的哈希码进行比较。哈希值是根据内部的存储的数据及其他条件进行计算的,并且哈希值是一个int型的数据,因此哈希值是有范围的也就是整数的范围,而数据理论上来说是无限的,无限的数据在用有限的哈希值去对应必然是会产生重复的,也就是所说的哈希冲突。原创 2023-08-13 15:22:56 · 96 阅读 · 1 评论 -
关于ArrayList和LinkedList
③:从删除元素的角度来说:ArrayList基于数组实现的,因此在插入或删除元素时(除过尾部)都需要将后面的元素进行操作(删除前移,添加后移动),可以理解为排队有人插队或者离队后面的人都需要动。(1):当使用空参构造器进行初始化时,长度为0,当开始添加进第一个元素后,底层就会分配长度为10的空间,当存储第十一个时就会按照原来的长度的1.5倍进行扩容,也就是15,以后每次扩容都是按照之前按的1.5倍进行扩容,当超过int的最大长度2147483647时,就会报出错误,ArrayList的扩容机制;原创 2023-08-13 15:17:46 · 120 阅读 · 1 评论 -
6、Java中常用API
4.字面量定义的String可以直接使用==进行判断,原因是两个均指向同一个在栈中创建的内容,而通过new关键字创建的话,实际创建了两个对象一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc”String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx(str) 基本数据类型、包装类 --> String:调用String重载的valueOf(xxx)默认情况下,扩容为原来容量的2倍 + 2,同时将原数组中的元素复制到新的数组中。原创 2023-08-07 10:01:26 · 90 阅读 · 1 评论 -
5、面向对象(中)
1、OOP特征二:继承性。6、OOP特征三:多态性。7、Object类的使用。3、四种访问权限修饰符。5、子类对象实例化过程。4、关键字super。原创 2023-08-03 19:42:55 · 68 阅读 · 0 评论 -
4、Java面向对象(上)
局部变量表存放了编译期可知长度的各种基本数据类型(Boolean、byte、char、 short、int、foat、long、double)、对象引用(reference类型,他不等同于对象本身,是对象在堆内存的首地址)。”表示结束此方法的意思。3.其他关键字:this、super、static、final、abstract、interface、package、import。方法区:(Method Aree),用于存储已被虚拟机加载的信息类、常量、静态变量、即时编译器编译后的代码等数据。原创 2023-07-31 17:23:52 · 260 阅读 · 1 评论 -
3、Java流程控制
9.写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,优先使用switch-case。 顺序结构执行的顺序:程序从上到下逐行的执行,中间没有任何判断和转跳(坦白的来讲,就是在代码中不适用分支和循环的语句就是顺序结构)否则,范围小的没有机会执行。 需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求输入的数据类型不匹配时,4.如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略,但是不建议省略。原创 2023-07-31 15:19:22 · 108 阅读 · 1 评论 -
2、Java基本语法
如果程序既可以使用三元运算符,又可以使用if-else,那么优先选择三元运算符,原因:简洁,效率高。 内存中的一个存储区域,该区域的数据可在同一类型范围内不断变化,变量是程序中最基本的存储单元。说明:此时的容量大小指的是,表示数的范围大和小。当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。&和&&不同点:当符号左边是false时,&继续执行右边的运算,&&不再执行右边的运算。|和||不同点:当符号左边是时true,|继续执行右边的运算,||不再执行右边的运算。原创 2023-07-31 14:45:07 · 80 阅读 · 1 评论 -
1、java简介
(一)、什么是Java(二)、Java用途(三)、Java语言特点(四)、Java开发环境安装JDKJava程序执行过程二、记事本运行JAVA代码Sun公司在1995年推出的一款面向对象的高级的程序设计语言,现在的主要应用与互联网领域的后台服务器开发。sun–>09年被Oracle甲骨文收购Java之父–>詹姆斯 高斯林计算机之父–>图灵,冯诺依曼。原创 2023-07-30 12:39:04 · 106 阅读 · 1 评论