Java基础
java基础知识关键点
huangxiao776
这个作者很懒,什么都没留下…
展开
-
ThreadLocal源码分析详解
引言由于太久没有复习过ThreadLocal啦,有点记忆丢失了,正好出一篇来记录一下【绝绝子ing】。前置知识点首先,ThreadLocal有一个静态内部类ThreadLocalMap,ThreadLocalMap就是用来保存线程内的共享变量的;然后,在Thread中就有一个ThreadLocal.ThreadLocalMap变量;所以呢,线程内共享就是把数据保存在自己的Thread的ThreadLocal.ThreadLocalMap中啦。ThreadLocalThreadLocal源码还是挺简原创 2021-05-15 14:43:19 · 283 阅读 · 0 评论 -
BigDecimal除法报错:java.lang.ArithmeticException: Division undefined
解决指定除法保留的小数点位数以及四舍五入的方式如下是保留两位小数、向上取整的除法BigDecimal nowSales = new BigDecimal("23.01");BigDecimal preSales= new BigDecimal("15.07");BigDecimal sp = nowSales.divide(preSales,2, RoundingMode.HALF_UP);直接这么写是会报错的BigDecimal sp = nowSales.divide(preSales)原创 2021-02-09 23:05:25 · 3051 阅读 · 1 评论 -
Java -- Thread中start和run方法的区别
文章目录一、认识Thread的 start() 和 run()1。start():2。run():3。总结:二、代码实例:三、线程状态说明:一、认识Thread的 start() 和 run()1。start():我们先来看看API中对于该方法的介绍:使该线程开始执行;Java 虚拟机调用该线程的 run 方法。结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。用star转载 2020-11-15 13:05:01 · 1357 阅读 · 0 评论 -
线程调度及进程调度详解
线程调度及进程调度原文地址:https://blog.csdn.net/sinat_36184075/article/details/104804499原创 2020-10-29 12:18:50 · 466 阅读 · 0 评论 -
数组和集合的区别
数组和集合区别:数组静态的,一旦创建了一个数组实例,它的容量是固定的,是不能改变的。而集合是可以动态扩容的。数组要声明它要存储的元素类型。而集合不需要声明(不加泛型时添加的类型是Object)。3.数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的....原创 2020-10-27 14:54:42 · 966 阅读 · 0 评论 -
阻塞状态和等待状态的区别
在进入synchronized方法之前因为抢不到锁对象而进入阻塞状态,进入阻塞队列。进入到synchronized方法后由于调用了wait()方法而进入等待状态,此时进入等待队列,等待其它线程调用它的notify()方法将他唤醒。...原创 2020-10-27 14:39:05 · 4704 阅读 · 4 评论 -
线程、多线程以及线程池详解与总结
什么是进程?进程是程序一次动态执行的过程。一个程序一般是一个进程,也可以有多个进程。一个进程可以有多个线程,但只有一个主线程。进程与程序不是一 一对应的。系统中没有相同的进程(开始时间不同)。什么是线程?线程(thread): 是操作系统能够进行运算调度的最小单位。线程是进程的一部分,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程是独立调度和分派的基本单位。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,原创 2020-10-18 13:43:10 · 687 阅读 · 2 评论 -
CAS原理分析及ABA问题详解
什么是CAS?CAS(Compare-and-Swap,比较并替换),CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B;其作用是当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。Java是无法直接访问操作系统底层的API的(原因是Java的跨平台性限制了Java不能和操作系统耦合),所以Java通过JNI(Java Nativa Interface,Java本地接口)调用==C/C++ ==来实现CAS操作。原创 2020-10-16 19:20:12 · 3947 阅读 · 0 评论 -
ConcurrentHashMap底层结构分析
jdk1.7的ConcurrentHashMap底层数据结构: 分段的数组+链表。ConcurrentHashMap是由Segment数据结构和HashEntry数据结构组成。Segment实现了ReentrantLock,所以Segment是一种可重入锁,扮演锁的角色。HashEntry用于存储键值对数据一个ConcurrentHashMap包含一个Segment数组。Segment②jdk1.8是数组+链表/红黑树实现线程安全的方式:①在jdk1.7的时候,ConcurrentHashMap原创 2020-10-15 15:05:20 · 1932 阅读 · 0 评论 -
请简单说明一下什么是迭代器?
Iterator提供了统一遍历操作集合元素的统一接口, Collection接口实现Iterable接口,每个集合都通过实现Iterable接口中iterator()方法返回Iterator接口的实例, 然后对集合的元素进行迭代操作.有一点需要注意的是:在迭代元素的时候不能通过集合的方法删除元素, 否则会抛出ConcurrentModificationException 异常. 但是可以通过Iterator接口中的remove()方法进行删除....原创 2020-10-14 19:43:15 · 473 阅读 · 0 评论 -
Java集合框架总结
前言,Java集合框架主要是由 Collection和Map这两个接口派生出来的,Collection派生出了三个子接口:List、 Set、Queue(队列,一个常见功能就是先进先出)。由于还未深入了解Queue接口的一些实现类,所以本文暂时未给出相关的总结,以免误人子弟。CollectionList接口ArrayList:不保证线程安全,底层使用Object数组,数组默认大小是10Vector:保证线程安全,方法用synchronized修饰,底层使用Object数组,数组默认大小是10L原创 2020-10-14 18:13:58 · 193 阅读 · 1 评论 -
请你解释一下类加载机制,双亲委派模型,好处是什么?
虚拟机类加载机制:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。家宴准姐出其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。双亲委派模型:某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,转载 2020-10-13 17:15:54 · 881 阅读 · 0 评论 -
interface接口的修饰符关键字
interface接口方法默认的修饰符是 public abstract;不可以使用private或者protected修饰。备注:1.在JDK1.8中,接口可以定义静态方法,可以直接用接口名调用。public interface Main{ static int ss() { return 0; }}2.在JDK1.8中,接口可以使用default关键字定义非抽象方法,实现该接口的时候不用实现非抽象方法,当然你也可以选择重写。public interface Main{ de原创 2020-10-13 12:10:43 · 9317 阅读 · 0 评论