Java基础
文章平均质量分 55
Java学习中的各类知识点
haha怪
这个作者很懒,什么都没留下…
展开
-
BIO NIO AIO IO多路复用
目录 一、基础概念 一、阻塞和非阻塞 二、同步和的异步 三、阻塞非阻塞和同步异步的结合 同步阻塞: 同步非阻塞: 异步阻塞: 异步非阻塞: 二、BIO模型 (Blocking IO)同步阻塞IO BIO特点 三、NIO模型(Non-blocking IO) NIO特点: 四、IO多路复用模型 IO多路复用和NIO的区别 ...转载 2022-02-23 17:04:50 · 1028 阅读 · 0 评论 -
volatile关键词
继上一篇文章提到的Java内存模型的原子性、可见性、有序性问题,针对性讨论一下volatile关键字的作用。synchronized主要修饰方法和代码块,而volatile修饰变量,都是在多线程同步中起作用。volatile修饰共享变量(类的成员变量、类的静态成员变量),具有如下性质:(1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了该变量的值,这新值对其他线程来说是立即可见的。如何理解可见性呢?它会强制将线程工作区变量缓存的修改操作立即写入主存;同时会导致其他CPU中对应的缓存行无原创 2022-02-22 15:15:42 · 209 阅读 · 0 评论 -
Java内存模型的原子性、可见性、有序性问题
在Java虚拟机规范中试图定义一种**Java内存模型(Java Memory Model,JMM)**来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,也没有限制编译器对指令进行重排序。也就是说,在java内存模型中,也会存在缓存一致性问题和指令重排序的问题。Java内存模型规定所有的变量都是存在主存当中(类似于物理内存),每个线程都有自己的工原创 2022-02-22 14:50:25 · 480 阅读 · 0 评论 -
简述Java的悲观锁和乐观锁概念
synchronized是悲观锁,线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。synchronized关键字会让没有得到锁资源的线程进入阻塞状态,而后在争夺到锁资源后恢复为运行状态,这个过程中涉及到操作系统用户模式和内核模式的转换,代价比较高。CAS(Compare And Swap)操作是乐观锁,其实是无锁算法,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。CAS机制当中使用了3个基本操作数:内存地址V,预期值A,要修改的新值B。更新一个变量的时候,只原创 2022-02-21 20:28:52 · 1346 阅读 · 0 评论 -
HashMap、HashTable、ConcurrentHashMap之间的联系和区别
HashMap使用数组+链表的结构,默认情况下数组大小为16①存储(put)根据key的hashCode重新计算hash值, 搜索指定hash值在对应table中的索引,遍历这一索引位置的链表,有相同key值将value进行替换,新加入的Entry放在链头,最先加入的放在链尾。②读取(get)根据hash算法来决定其在数组中的存储位置(索引),再根据equals方法(判断key值)决定其在该数组位置上的链表中的存储位置。③扩容(resize)当hashmap中的元素个数超过数组大小*load原创 2022-02-21 15:31:52 · 423 阅读 · 0 评论 -
抽象类和接口
抽象类① 声明时需要abstract关键字,抽象类不能被实例化,类的其它功能和普通类一样;② 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类;接口① 以interface来声明,接口并不是类,属于不同的概念,类描述对象的属性和方法,接口则包含类要实现的方法;② 接口中所有的方法必须是抽象方法,Java 8之后接口中可以使用default 关键字修饰的默认方法;③ 接口不能包含成员变量,除了public static final 类型变量;④ 接口中不能含有静态代码块以及静态方法(用原创 2021-12-24 19:14:14 · 79 阅读 · 0 评论 -
Java代码中static、final、static final的使用
static可以修饰属性,方法,代码段{},内部类(静态内部类或嵌套内部类),注意:不能修饰局部变量(方法中的变量)static修饰的属性在类加载的准备阶段会分配到类中的内存,并给一个初始值(例如int赋值0,对象赋值null),在类加载的初始化阶段,根据代码执行初始化,因此也可以不在代码部分进行赋值。初始化后能改变,所有对象都只有同一个值,不创建对象也能调用static修饰的属性、方法等,直接用类名调用。static修饰代码段也是会在类加载的过程按顺序依次被执行,并且只执行一次final可以原创 2021-12-24 18:34:13 · 576 阅读 · 0 评论