Java基础
文章平均质量分 94
Jason&Zhou
你知道的越多,你不知道的越多!
展开
-
String值为什么不能被修改以及对StringBuff和StringBuilder的理解
一、String值为什么不能被修改1.1、首先我们来看个例子:public class testString { public static void main(String[] args) { String str = "abc"; str = "123"; System.out.println(str); }}看到上面的例子,你们会认为str的值改变了啊,从“abc”变为“123”了啊。表面上看确实是这个样子的,但让我们来看下在原创 2021-10-24 10:02:34 · 1388 阅读 · 2 评论 -
ArrayList源码解析
一、前言ArrayList我们在实际开发中是一个很常用的数据结构,可以称它为动态数组。我们平常用的这个形式的:int[] a = new int[size]称为普通数组,在new时候需要指定其大小(size),不能够动态的增加其大小,那么接下来我们来看看ArrayList为什么称之为动态数组。二、正文1.ArrayList有用过嘛?它是一个什么东西?用来干什么的?有用过,ArrayList就是数组列表,主要用来装载数据,当我们装载的是基本类型的数据int、long、boolean、short、b原创 2021-07-11 20:07:23 · 209 阅读 · 1 评论 -
Java线程间的协作以及创建线程的四种方式
一、前言线程间的协作方法主要有:wait、notify、notifyAll、sleep、yield、join,本文首先介绍下线程的状态有哪些,然后解释下各个方法的含义以及作用,最后从底层原理解释下它们之间的区别。二、正文1.线程的状态Java中线程中状态可分为六种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如mai原创 2021-05-30 17:25:33 · 290 阅读 · 0 评论 -
CountDownLatch-CyclicBarrier-Semaphore解析
一、前言CountDownLatch、CyclicBarrier、Semaphore是JUC包下常用的同步锁,其中CountDownLatch、Semaphore是基于AQS(AbstractQueuedSynchronizer)实现的共享锁。下面来看下这三个锁的具体区别。二、正文1.CountDownLatch解析先看下官方源码解释:A synchronization aid that allows one or more threads to wait until a set of op原创 2021-05-30 16:58:07 · 214 阅读 · 0 评论 -
AQS-ReentrantLock解析
前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQS 也是面试中区分侯选人的常见考点。正文1.AQS实现原理AQS 全称原创 2021-05-30 16:41:39 · 152 阅读 · 0 评论 -
ThreadLocal源码解析
前言ThreadLocal提供了线程的本地实例,它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。主要的作用是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。总的来说,ThreadLocal适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。正文1.ThreadLocal底层原理?首先我先说下它的使用:ThreadLocal<String> localName =原创 2021-05-30 16:34:06 · 374 阅读 · 0 评论 -
Synchronized应用及其底层原理解析
一、前言在涉及到多线程同步的问题时,可能第一时间会想到用Synchronized,在jdk1.6以前Synchronized属于重量锁,就是同一时间只允许一个线程获取锁,其他线程都要阻塞等待,但这对于多线程效率问题有很大影响。在jdk1.6之后,Java团队对Synchronized做了优化,进行了锁升级,升级方向:无锁—>偏向锁—>轻量级锁—>重量级锁。下面我们来详细解析下Synchronized的使用和源码。二、正文1.Synchronized的使用场景?Synchron原创 2021-05-27 22:29:48 · 357 阅读 · 2 评论 -
Volatile应用及其底层原理解析
Volatile应用及其底层原理解析前言Volatile在面试的时候算是多线程篇必问的一个问题了,我们先通过几个栗子,看看得到的结果是不是我们想像的一样,然后在引出Volatile,以及其作用。正文我们先来看一个栗子:public class volatileDemo { public static void main(String[] args) { Jason jason = new Jason(); jason.start(); for原创 2021-05-26 21:38:04 · 364 阅读 · 3 评论 -
ConcurrentHashMap源码详解
ConcurrentHashMap源码详解一、前言在HashMap源码解析篇中,我们对HashMap源码部分进行了详细透彻的分析,提出了连环追命16连问,算是把HashMap所涉及到的知识点在源码层面都分析完了。但是HashMap在多线程环境下有线程安全的问题,这篇文章,我们讲下有什么集合可以保证在多线程的环境中线程安全。二、正文1.HashMap在多线程环境中存在线程安全的问题,那应该如何处理呢?通常我们会有三方替代方式:使用Collections.synchronizedMap(Map原创 2021-05-25 21:40:17 · 946 阅读 · 23 评论 -
HashMap源码解析
一、前言HashMap这个数据结构,不管是在实际应用中还是面试中,都是很重要的知识点。例如:在实际应用中,我们需要在O(1)时间内查找到相关的元素,假如遍历数据找其相关元素,那时间复杂度就是O(n)了,不符合我们需要在O(1)时间复杂度里找到其元素,这时我们就想到用HashMap这个数据结构来进行查找,通过匹配key和value值,可以在O(1)时间内快速找到。再比如,在面试中,面试官对HashMap底层原理会进行全方位的考察,如:HashMap 1.7,1.8底层原理有什么区别?扩容机制?线程是否安全?原创 2021-05-24 19:23:40 · 255 阅读 · 4 评论