自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM之类加载

Java Virtual Machine,Java虚拟机。Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。

2023-08-25 23:59:02 80 1

原创 动态代理之jdk动态代理

动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。代理类在程序运行期间,创建的代理对象称之为动态代理对象。这种情况下,创建的代理对象,并不是事先在Java代码中定义好的。而是在运行期间,根据我们在动态代理对象中的“指示”,动态生成的。

2023-08-18 15:23:34 475 1

原创 ReentrantLock详解

是一个可重入锁、可打断锁、公平锁、非公平锁,不同于的是,释放锁是由我们决定的,而释放锁是不受我们控制的。

2023-08-04 15:36:51 143 1

原创 synchronized是如何锁住对象的?

synchronized是Java中的关键字,synchronized可以保证方法或者代码块在运行时,同一时刻只有一个线程可以进入到被修饰的代码块中,同时它还可以保证共享变量的内存可见性,Java中每一个对象都可以作为锁,这是synchronized实现同步的基础。修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,此时synchronized锁住的则是()中的对象。修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,

2023-07-26 15:43:09 1128 1

原创 Java基础之锁

将某种资源私有化的一种物品,没错java里面的锁也是这种特性,它可以让某个方法,某个变量或某个通道,在某个时刻下只能被一个线程占用。只有当这个锁释放了,另外的线程才可以使用。

2023-07-04 18:19:16 41

原创 Java基础之多线程

进程:进程是系统中正在运行的一个程序,程序一旦运行就是进程。线程:一个进程可以拥有多个线程,线程是进程的一个特定执行路径。

2023-07-04 16:28:09 25

原创 Java基础之序列化

一、什么是序列化?;而与之相反的操作被称为序列化的目的是为了方便数据的传递以及存储到磁盘上(把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要将对象转换成字节流才能进行网络传输。对于这种通用的操作,就出现了序列化来统一这些格式)。简单来说序列化就是一种用来处理对象流的机制。将对象转化成字节序列后可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。

2023-07-03 16:15:03 366 1

原创 深克隆、浅克隆

浅克隆:只复制基本类型的数据,引用类型的数据只复制了引用的地址,引用的对象并没有复制,在新的对象中修改引用类型的数据会影响原对象中的引用。深克隆:是在引用类型的类中也实现了clone,是clone的嵌套,复制后的对象与原对象之间完全不会影响。使用序列化也能完成深复制的功能:对象序列化后写入流中,此时也就不存在引用什么的概念了,再从流中读取,生成新的对象,新对象和原对象之间也是完全互不影响的。使用clone实现的深克隆其实是浅克隆中嵌套了浅克隆,与toString方法类似。

2023-07-03 15:36:51 266 1

原创 类、抽象类、接口

子类中会默认有一个无参构造方法,

2023-07-03 15:15:10 57 1

原创 String,StringBuffer,StringBuilder

当字符串相加部分中有变量,那么就会用StringBulider的方式来添加,那么返回的地址就是堆中StringBuilder对象的地址!当字符串相加的部分中全部都是常量时,那么就会直接进入字符串池中进行操作,所以我们生成的str5对象地址就在字符串池中。当intern()方法被调用,如果字符串常量池中含有一个字符串和当前调用方法的字符串eqauls相等,那么就会返回池中的字符串。4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。

2023-07-02 15:24:50 47 1

原创 HashTable、Collections.synchronizedMap、ConcurrentHashMap多线程插入元素的效率比较

ConcurrentHashMap首先先使用CAS插入元素,CAS操作的偏底层的速度快。如果CAS失败则会通过synchronized同步代码块来插入元素,这里。3)ConcurrentHashMap:ConcurrentHashMap是通过使用CAS和加入同步代码块来插入元素的线程安全。关键字修饰方法来保证多线程情况下插入元素的线程安全。两个类进行插入操作时锁的都是整张表。锁的是一个位置的链表或者树的头节点。锁的是HashTable对象。,并不影响其他位置插入元素。块来插入元素的线程安全。

2023-07-01 15:58:43 245

原创 ConcurrentHashMap

ConcurrentHashMap是一个线程安全的HashMap,之前介绍过Hashtable是线程安全的,但是由于在方法前用了关键字修饰,所以会导致效率降低。ConcurrentHashMap使用了CAS和synchronized关键字来保证线程安全。JDK1.7时用的是分段锁实现线程安全,即将一个map分为多个segment对象,操作时锁其中一个segment其他segment对象不受影响。

2023-06-30 15:44:41 34

原创 Hashtable

一、Hashtable简介Hashtable的父类是Dictionary类,实现了Map, Cloneable, java.io.Serializable接口。因为Hashtable的所有public方法都有关键字修饰,所以它是线程安全的散列表,Hashtable的键值对都不允许为空。Hashtable的底层数据结构:数组+链表二、源码分析1)变量2)构造方法3) put方法。

2023-06-23 15:28:36 54 1

原创 HashMap

HashMap是基于哈希表的Map 接口的实现。它还实现了Serialiable接口,因为存储数据的变量被transient修饰,所以它和ArrayList一样重写了writeObject方法和readObject方法。HashMap以键值对的方式来存储数据根据键的hashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,线程不安全的。HashMap是无序的,它不会记录存储数据时的顺序。数组+链表。二、源码分析1)变量/**

2023-06-22 17:25:06 77 1

原创 LinkedList

一、LinkedList简介(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。LinkedList实现了接口,和ArrayList一样虽然实现了序列化接口但是存储数据的变量依旧被transient修饰。LinkedList重写了writeObject()和readObject()来进行序列化和反序列化。

2023-06-21 17:09:48 35

原创 ArrayList

ArrayList是一个动态数组,底层存储数据的就是一个Object数组。默认的大小为10,使用无参构造生成的对象一开始是一个空的数组,在调用add方法后会进行容量初始化。ArrayList实现了Serializable接口所以可以进行序列化。但是存储的数据的Object数组是被transient修饰,所以不进行序列化,通过重写writeObject()方法进行缓存数据。ArrayLIst实现了RandomAccess接口,此接口是一个标志接口。

2023-06-21 13:41:53 46 2

空空如也

空空如也

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

TA关注的人

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