自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 3.1JVM

编译过程编译时期-语法糖如泛型:泛型只会在Java源码中存在,编译过后会被替换为原来的原生类型(Raw Type,也称为裸类型)了。这个过程也被称为:泛型擦除。有了泛型这颗语法糖以后:代码更加简洁【不用强制转换】程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】可读性和稳定性【在编写集合的时候,就限定了类型】JVM实现跨平台我们通过 javac.exe编译器编译我们的 .java源代码文件生成出 .class文件。.class文件

2022-03-04 22:16:07 650

原创 2.11Atomic

java原子类

2022-03-04 22:14:20 251

原创 2.10同步工具类

CountDownLatch(闭锁)允许一个或多个线程一直等待,直到其它线程完成它们的操作。常用API:await()和countDown()使用:count初始化CountDownLatch,然后需要等待的线程调用await方法。await方法会一直受阻塞直到count=0。而其它线程完成自己的操作后,调用countDown()使计数器count减1。当count减到0时,所有在等待的线程均会被释放通过count变量来控制等待,如果count值为0了(其他线程的任务都完成了),那就可以继续执行

2022-03-04 22:13:54 103

原创 2.9死锁

多线程死锁与进程死锁什么时候会多线程死锁当前线程拥有其他线程需要的资源当前线程等待其他线程已拥有的资源都不放弃自己拥有的资源锁顺序死锁、动态顺序死锁、协作对象之间发生死锁(隐式获取两个锁)避免死锁的方法固定加锁的顺序(针对锁顺序死锁)开放调用(针对对象之间协作造成的死锁):同步代码块最好仅被用于保护那些涉及共享状态的操作使用定时锁–>tryLock()如果等待获取锁时间超时,则抛出异常而不是一直等待!...

2022-03-04 22:13:07 65

原创 2.8线程池

java线程池

2022-03-04 22:12:40 220

原创 0.2java基础(中)

字符串部分有待进一步补充

2022-03-04 22:11:59 3687

原创 0.1java基础(上)

文章参考了javaguide,按照自己阅读与理解进行了挑选整理,方便自己复习与阅读

2022-03-04 22:11:20 4378

原创 2.5java锁(synchronized,Lock,公平锁)

synchronizedsynchronized是Java的一个关键字,它能够将代码块(方法)锁起来只要在代码块(方法)添加关键字synchronized,即可以实现同步synchronized是一种互斥锁一次只能允许一个线程进入被锁住的代码块synchronized是一种内置锁/监视器锁Java中每个对象都有一个内置锁(监视器,也可以理解成锁标记),而synchronized就是使用**对象的内置锁(监视器)**来将代码块(方法)锁定的!同步代码块:monitorenter和mo

2022-02-27 22:27:48 910

原创 2.4ThreadLocal线程数据隔离实现

ThreadLocal本身并不存储值,它只是作为一个key来让线程从ThreadLocalMap获取value。ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离=>往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocalMap没有链表结构,冲突时会线性向后查找。这里还画了一个Entry中的key为null的数据(Entry=2 的灰

2022-02-27 22:27:17 504

原创 2.3线程安全相关概念

学习使用哪种同步机制来实现线程安全对象的发布与逸出发布(publish) 使对象能够在当前作用域之外的代码中使用逸出(escape) 当某个不应该发布的对象被发布了常见逸出的有下面几种方式:静态域逸出public修饰的get方法方法参数传递隐式的this安全发布对象在静态域中直接初始化 : public static Person = new Person();静态初始化由JVM在类的初始化阶段就执行了,JVM内部存在着同步机制,致使这种方式我们可以安全发布对象

2022-02-27 22:26:33 4425

原创 2.2Thread类

多线程从本质上都是由Thread类来进行操作的线程名查看线程名Thread.currentThread().getName()自动生成的名字:主线程叫做main,其他线程是Thread-x修改线程名setName(String name)守护线程守护线程是为其他线程服务的垃圾回收线程就是守护线程守护线程有一个特点:当别的用户线程执行完了,虚拟机就会退出,守护线程也就会被停止掉了。也就是说:守护线程作为一个服务线程,没有服务对象就没有必要继续运行了**在线程启动前**设置为守

2022-02-27 22:25:56 49

原创 2.1多线程基本知识

进程进程是程序的一次执行,进程是一个程序及其数据在处理机上顺序执行时所发生的活动,进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位进程是系统进行资源分配和调度的独立单位。每一个进程都有它自己的内存空间和系统资源为使程序能并发执行,系统必须进行以下的一系列操作:(1)创建进程,系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;(2)撤消进程,系统在撤消进程时,又必须先对其所占有的资源执行回

2022-02-27 22:25:18 95

原创 1.5CopyOnWriteArrayList

避免fail-fast的方法:使用java.util.concurrent包下的类去取代java.util包下的类import java.util.concurrent.CopyOnWriteArrayList;List list = new CopyOnWriteArrayList<>();使用Collections.synchronizedList(new ArrayList())来使ArrayList变成是线程安全的话,也是几乎都是每个方法都加上synchronized关键字的,只不

2022-02-27 22:24:38 358

原创 1.4Set+题目

SetHashSet集合(允许null,不同步)A:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树TreeSet集合(不允许null,不同步)A:底层数据结构是红黑树(是一个自平衡的二叉树)B:保证元素的排序方式LinkedHashSet集合(允许null,不同步)A::底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成HashSet底层实际上是一个HashMap实例value是一个Object,所有的value都是它。HashSet实际上就是封装

2022-02-27 22:23:56 168

原创 1.3锁的基本知识

乐观锁与悲观锁锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。Java在JDK1.5之前都是靠synchronized关键字保证同步的。独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并且只有在确保

2022-02-27 22:23:04 153

原创 1.2java Map相关知识笔记

HashMap(允许null、不同步)HashMap及与HashTable的比较:HashMap(允许null、不同步,数组+链表+红黑树),HashTable(不允许key和value为null,线程安全,数组+链表)HashTable替代:ConcurrentHashMap,不允许null再散列,桶数*2tableSizeFor(),返回一个大于输入参数且最接近2的整数此幂的数。用&实现取余,用&oldcap实现扩容时元素移动与否判断(移动oldcap或不动)LinkedHa

2022-02-27 22:20:12 172

原创 1.1java List相关内容笔记

List(可重复)Set不可重复ArrayList(底层结构数组,线程不安全)LinkedList(链表,线程不安全)Vector(数组,线程安全)ArrayListarraycopy(),native,由C/C++来编写的remove方法,移动后,最后一个元素设为null,让Gc回收使用Arrays.copyOf(),copyOf中使用arraycopy()ArrayList的add方法底层其实都是arraycopy()(由C/C++编写,native)基于动态数组实现,在增删时,

2022-02-27 22:18:35 153

空空如也

空空如也

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

TA关注的人

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