Java 基础
文章平均质量分 78
Java 基础
骑士梦
自强不息,厚德载物
展开
-
Java Lock
你对锁的理解?如何手动模拟一个死锁?在并发编程中有两个重要的概念 线程和锁,多线程是一把双刃剑,它在提高程序性能的同时,也带来了编码的复杂性,对开发者的要求也提高了一个档次。而锁的出现就是为了保障多线程在同时操作一组资源时的数据一致性,当我们给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。当然,在所有的面试中也都少不了关于 “锁” 方面的相关问题。死锁是指两个线程同时占用两个资源,又在彼此等待对方释放锁资源,如下图所示: 死锁的代码演示如下:/**原创 2021-07-10 21:38:27 · 193 阅读 · 0 评论 -
Java 深克隆 和 浅克隆
浅克隆(Shadow Clone)是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对象的地址是共享给原型对象和克隆对象的。简单来说就是浅克隆只会复制原型对象,但不会复制它所引用的对象,如下图所示:深克隆(Deep Clone)是将原型对象中的所有类型,无论是值类型还是引用类型,都复制一份给克隆对象,也就是说深克隆会把原型对象和原型对象所引用的对象,都复制一份给克隆对象,如下图原创 2021-07-05 14:18:27 · 329 阅读 · 0 评论 -
Java synchronized 和 ReentrantLock
synchronized 和 ReentrantLock 的实现原理是什么?在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。synchronized 属于独占式悲观锁,是通过 JVM 隐式实现的,synchronized 只允许同一时刻只有一个线程操作资源。原创 2020-05-15 17:13:04 · 594 阅读 · 0 评论 -
Java ThreadPool
详解 ThreadPoolExecutor 的参数含义及源码执行流程?线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开 ThreadPoolExecutor ,在阿里巴巴的《Java 开发手册》中是这样规定线程池的:...原创 2020-05-09 16:15:46 · 397 阅读 · 0 评论 -
Java Thread
线程的状态有哪些?它是如何工作的?线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。线程的状态在 JDK 1.5 之后以枚举的方式被定义在 Thread 的源码中,它总共包含以下 6 个状态:NEW,新建状态,线...原创 2020-05-08 16:23:08 · 234 阅读 · 0 评论 -
Java HashMap 源码分析
一、HashMap 底层实现二、HashMap 底层操作三、TreeMap四、LinkedHashMap原创 2020-05-08 16:22:11 · 279 阅读 · 0 评论 -
Java String
StringString 是如何实现的?// 以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用于存储字符串的值 priv...原创 2020-05-08 16:18:04 · 222 阅读 · 1 评论