自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 volatile关键字解析

内存模型的概念计算机执行程序时,每条指令都是在cpu中执行的,执行指令过程中,涉及到的数据的读写操作,程序运行过程中临时数据都保存在主存(物理内存)中,由于cpu的执行速度很快,所以数据的读取和向内存中的的写入相比较cpu的执行速度要慢很多,因此任何时候对数据的操作通过内存交互都会降低指令的执行速度,所以cpu里面产生了高速缓存。对于多线程,在多核中,每条线程都运行于不同的cpu中,所以每个线...

2020-02-23 17:41:09 277 1

原创 volatile能保证有序性吗?

volatile关键字能禁止指令重排,所以一定程度上保证了有序性;volatile关键字禁止指令重排的两层意思:(1)当程序执行volatile关键字进行读操作或写操作时,volatile关键字前面所有程序操作已经全部完成且结果对后面的所有操作均显示,volatile关键字后面的操作已经还没有进行。(2)进行指令优化时,不能将volatile关键字后面的语句放在volatile关键字前面执行...

2020-02-23 10:00:13 1271 2

原创 Java多线程

1、使用synchronized关键字的使用方式:(1)修饰实例的方法:作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁;(2)修饰静态方法:作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁,即给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员(static表明该类的一个静态资源,不管new了多少个对象,只有一份,所以对该类的所有对象都加了...

2020-02-17 18:59:08 245

原创 Java垃圾回收机制

Java垃圾回收机制一、如何确定一个对象是否可以被回收?1、引用计数算法:判断对象的引用数量引用计数算法通过判断对象的引用数量决定对象是否可以被回收;引用计数算法的堆内每个对象实例都有一个引用计数,当一个对象被创建时,且该对象实例分配给一个引用变量,该对象实例的引用计数设置为1,当任何其他变量被赋值为这个对象的引用时,对象实例的引用计数就加1;当一个对象实例的某个引用超过了生命周期或被设置为...

2020-02-12 12:35:06 210

原创 类加载过程和对象的创建过程

类加载过程JVM执行时,遇到新类,会到内存中的方法区域找class信息,如果有,拿来直接使用,如果没有,则将.class文件加载到方法区;类加载时,将静态变量加载到方法区的静态区域,将非静态变量加载到方法区的非静态区域,静态代码块是在类加载期间自动执行的,非静态代码块是在创建对象时执行的代码,不创建对象不执行该类的非静态代码块;加载过程:1、JVM在方法区中找有没有相应的.class文件存在...

2020-02-11 10:54:49 447

原创 Java内存区域

Java内存区域Java虚拟机在java程序运行时将虚拟机管理的内存区域划分为线程共享区和线程私有区,分别包含的运行时数据区有java栈、方法区和PC程序计数器、虚拟机栈、本地方法栈;即:线程共享区:java栈、方法区;线程私有区:pc程序计数器、虚拟机栈、本地方法栈注:线程私有区随着线程的创建和消亡,所以无需考虑线程的回收问题pc程序计数器:pc程序计数器占用较小的内存空间,是当前线...

2020-02-10 12:54:26 127

原创 ConcurrentHashMap和HashTable的区别

ConcurrentHashMap和HashTable的区别底层数据结构:ConcurrentHashMap在JDK1.7时,底层采用分段数组+链表形式;JDK1.8以后和HashMap一样采用数组+链表/红黑二叉树,HashTable和JDK1.8以前的HashMap一样的底层数据结构:数组+链表,数组是HashMap的主体,链表是为了解决哈希冲突问题;实现线程安全方式:1、在JDK1.7...

2020-02-05 18:46:29 250

原创 HashMap和HashSet的区别

HashMap和HashSet的区别HashSet底层是基于HashMap实现的,HashSet中实现了clone()、writeObject()、readObject()方法,其余方法调用的是HashMap的方法;HashMap:1、实现的是Map接口;2、存储的Key-Value对;3、通过判断Key的HashCode值相等和equals()方法返回true来决定对象相等;4、使用...

2020-02-05 17:35:13 219

原创 HashMap和Hashtable的区别

HashMap和Hashtable的区别Map中保存的是具有映射关系的数据,因此Map集合中保存两组值,一组用于保存Map里的Key,另一组用于保存Map里的Value,Key和Value中的值可以是任何引用类型的数据,Map中的Key相当于一个Set集合(所有Key没有顺序,Key与Key之间不可以重复),可以使用KeySet()方法,用于返回Map里所有Key组成的Set集合;Map中的Va...

2020-02-05 12:58:38 166

原创 ArrayList和LinkedList异同

ArrayList和LinkedList异同1、是否保证线程安全:ArrayList和LinkedList都不是同步的,当多个线程访问到同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则必须手动保证该集合的同步性;所以都不保证线程安全;2、底层数据结构:ArrayList底层使用的是Object数组结构,LinkedList底层使用的是双向链表数据结构;3、插...

2020-02-04 18:15:02 442

原创 接口与抽象类的区别

接口不包含普通方法,只包含默认方法、私有方法、静态方法、抽象方法;抽象方法包含普通方法;接口里只能定义静态变量,在定义时指定默认值,不能定义普通成员变量;抽象类中既可以定义静态变量又能定义普通成员变量;接口里不包含构造器、初始化块。抽象类中既可以包含构造器又包含初始化块,抽象类中的构造器不适用于创建对象,而是在子类调用这些构造器时完成属于抽象类的初始化操作;一个类只能继承一个父类(包括抽象类...

2020-02-02 10:20:27 148

原创 接口

类:一种具体实现体,同一个类中内部状态数据,各种方法的实现细节完全相同;接口:定义一批类所需要遵守的规范,不关心类的内部状态数据和各种方法的具体实现细节,只需要规定这批类必须提供的方法;接口:是从多个相似类中抽象出来的规范(多个类共同的公共行为规范),接口不提供任何的实现;接口关键字:Interface接口修饰符:public ,如果没有public修饰,则默认的是包权限访问控制符,即只...

2020-02-01 19:54:06 222

原创 抽象类与抽象方法

抽象类与抽象方法必须使用abstract定义;有抽象方法的类只能被定义成抽象类,抽象类里面可以没有抽象方法;抽象方法没有方法体;抽象类不能被实例化(即使抽象类中没有抽象方法也不能被实例化),因为无法使用new关键字调用抽象类中的构造器方法来创建抽象类的实例;抽象类不能用于创建实例,只能当作父类被子类继承;含有抽象方法的类(直接定义一个抽象方法、继承一个抽象父类,但未完全实现抽象父类包含的...

2020-02-01 18:46:40 480

原创 Java中的==与equals区别

==与equals区别==:对于基本数据类型,比较的是两个基本数据类型变量之间的值是否相等;对于引用类型,比较的是两个引用类型变量之间所指向的对象是否是同一个对象 (比较的是内存地址),如果是,返回true,否则返回false;equals:比较的除基本数据类型以外的其他类型,由于equals是继承的Objects方法(比较的是内存地址),所以该类中若没有覆写Object...

2020-01-31 12:30:41 181

原创 基本类型的类型转换

基本类型的类型转换分为自动类型转换和强制类型转换。自动类型转换自动类型转换:把某种基本类型的值直接赋给另一种基本类型的变量或者把一个表数范围小的数值变量直接赋给另一种表数范围大的数值变量;eg:public class AutoConversion{ public static void main(String[] args){ int a = 6; //int类型可以自动转换为...

2020-01-30 21:01:32 434

原创 String与StringBuffer、StringBuilder的区别

String与StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?String类中使用final关键字修饰的字符数组保存字符串,private final char value[ ],即一旦一个String对象被创建以后,则包含在这个对象中的序列不可被更改,直至这个对象被销毁,所以String对象是不可变的。StringBuffer与StringBu...

2020-01-30 18:16:43 159

原创 final成员变量与final局部变量

final修饰符final关键字可以修饰类、变量和方法final修饰的变量,一旦该变量被赋予初始值,以后则不能改变(即获得初始值之后不能被重新赋值);final可以修饰成员变量(实际变量、类变量)、局部变量、形参。final成员变量final修饰的成员变量必须由程序员显示的指定初始值;final修饰的类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,并且只能在其中一个地方指...

2020-01-30 17:16:11 685 1

原创 JAVA中的成员变量与局部变量

知识内容的整理及例子均来自于李刚老师的疯狂Java将义

2020-01-29 12:01:22 276

原创 JAVA中重载与重写的区别

重载与重写的区别重载发生在同一个类中,方法名必须相同,参数个数、参数类型、参数顺序、方法返回值、访问修饰符可以不同,发生在编译时。重写发生在父子类中,方法名、参数列表(参数个数、参数类型、参数顺序)必须相同,返回值范围小于等于父类;访问修饰符大于父类;抛出异常类范围小于等于父类;若父类中方法的访问修饰符为***private***,则子类无法重写该方法。...

2020-01-28 10:40:47 122

原创 Eclipse中安装配置tomcat.maven.svn插件,并导入项目

Eclipse中安装tomcat.maven.svn插件Eclipse配置tomcat点击Windows——>preference——>Server——>Runtime Environments——>Add点击Add后选择所要安装的Tomcat版本点击Browse,选择Tomcat要安装的目录位置,最后点击Finsh和Apply and Close。Ecli...

2020-01-03 15:35:32 446

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除