11 2020 档案
摘要:一、前言 二、HashMap 2.1 HashMap数据结构 + HashMap线程不安全 + 哈希冲突 2.1.1 HashMap数据结构 学习的时候,先整体后细节,HashMap整体结构是 底层数组+链表 ,先记住,再开始看下面的 HashMap相关知识点: 底层数据结构:HashMap基于哈希
阅读全文
摘要:一、前言 如果面试官问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法? 遇到这样的问题,应该怎样回答呢?其实,equals和hashCode都是Object对象中的非final方法,它们设计的目的就是被用来覆盖(override)的,所以在程
阅读全文
摘要:一、前言 volatile关键字是Java51个关键字中用的比较少的一个,它是一个与多线程并发的关键字,但是实际开发中,一般不会用到,使用synchronize+wait()+notify()/notifyAll()或 lock+await()+signal()/signalAll() 组合就好了,
阅读全文
摘要:一、前言 CountDownLatch是在java1.5被引入,存在于java.util.cucurrent包中,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。 二、CountDownLatch概要 Coun
阅读全文
摘要:一、前言 在Java多线程模块中,ThreadLocal是比较重要的知识点,虽然ThreadLocal类位于java.lang包,但是这个类基本上仅用于多线程。 二、ThreadLocal类概要 2.1 由来 + 含义 + 使用场景 由来:一般的变量是多个线程共享,如果想一个线程独享一个变量,就需要
阅读全文
摘要:一、前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法、signal方法和signalAll方法,这几个方法主要对应的是synchronized中的wait方法、notif
阅读全文
摘要:一、前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持。 二、AQS源码对于lock.lock()的实现 2.1 AQS类 + 内部Node类 2.1.1 AQS类结构示意图 首先我们要看看AQS的结构的类图 从AQS
阅读全文
摘要:一、前言 二、synchronized局限性 + Lock锁机制的引入 2.1 synchronized局限性 第一,使用synchronized,其他线程只能等待直到持有锁的线程执行完释放锁(synchronized释放锁有且仅有两种情况) 如果一个代码块被synchronized修饰了,当一个线
阅读全文
摘要:一、前言 在Java 5之前,volatile是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与JMM(Jav
阅读全文
摘要:一、前言 synchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”的。的确,大部分并发控制操作都能使用synchronized来完成。在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java
阅读全文
摘要:一、前言 不管什么语言,并发的编程都是在高级的部分,因为并发的涉及的知识太广,不单单是操作系统的知识,还有计算机的组成的知识等等。说到底,这些年硬件的不断的发展,但是一直有一个核心的矛盾在:CPU、内存、I/O设备的三者的速度的差异。这就是所有的并发的源头。 CPU与内存:缓存,CPU增加了缓存,以
阅读全文