![](https://img-blog.csdnimg.cn/2019101111300897.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java core
文章平均质量分 92
封装加继承多态集合
晓寒风骤
这个作者很懒,什么都没留下…
展开
-
jdk集合源码阅读(八):并发下1.7HashMap死循环,1.8解决过程
前言:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。 1.jdk1.7中的HashMap 在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况: 1 public clas...原创 2020-04-01 09:51:44 · 520 阅读 · 0 评论 -
java多态底层实现原理
1.Java多态概述 多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。Java对于方法调用动态绑定的实现主要依赖于方法表,但通过类引用调用(invokevitual)和接口引用调用(invokeinterface)的实现则有所不同。 类引用调用的大致过程为:Java编译器将Java源代码编译成class文件,在编译过程中,会根据静态...原创 2020-03-30 14:24:12 · 1147 阅读 · 0 评论 -
jdk集合源码阅读(七):HashMap默认加载因子为什么选择0.75?
Hashtable 初始容量是11 ,扩容 方式为2N+1; HashMap 初始容量是16,扩容方式为2N; 阿里的人突然问我为啥扩容因子是0.75,回来总结了一下;提高空间利用率和 减少查询成本的折中,主要是泊松分布,0.75的话碰撞最小, HashMap有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动...原创 2020-03-10 10:32:49 · 450 阅读 · 0 评论 -
死磕 Java 并发
作者 :大明哥 博客 :http://cmsblogs.com/?cat=151 目录 : 《【死磕 Java 并发】—– 深入分析 synchronized 的实现原理》 《【死磕 Java 并发】—– 深入分析 volatile 的实现原理》 《【死磕 Java 并发】—– Java 内存模型之 happens-before》 《【死磕 Java 并发】—– Java 内存模...原创 2019-11-25 14:11:50 · 500 阅读 · 0 评论 -
Java多线程(十一):生产者/消费者模型
什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 生产者生产的时候消费者不能消费 消费者消费的时候生产者不能生产 缓冲区空时消费者不能消费 缓冲区满时生产者不能生产 生产者/模型作为一种重要的模型,它的优点在于: 解耦。因为多了一个缓冲...原创 2019-03-16 21:12:32 · 112 阅读 · 0 评论 -
Java多线程(十):读写锁和两种同步方式的对比
读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低。所以在JDK中提供了一种读写锁ReentrantReadWriteLock,使用它可以加快运行效率。 读写锁表示两个锁,一个是读操作相关的锁,称为共享锁;另一个是写操作相关的锁...原创 2019-03-16 21:11:30 · 240 阅读 · 0 评论 -
Java多线程(九):ThreadLocal源码剖析
ThreadLocal源码剖析 ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。 三个理论基础 在剖析ThreadLocal源码前,先讲一下ThreadLocal的三个理论基础: 1、每个线程都...原创 2019-03-15 16:32:20 · 164 阅读 · 0 评论 -
Java多线程(七):死锁
前言 死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在的死锁。 死锁 一个经典的多线程问题。 当一个线程永远地持有一个锁,并且其他线...原创 2019-03-15 16:30:12 · 124 阅读 · 0 评论 -
java8新特性 lambda Stream FunctionInterface
package com.example.sourcecode.study.Self.jdk8; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; public class LambdaTest { public static void main(S...原创 2018-12-21 16:18:45 · 317 阅读 · 0 评论 -
Java多线程(十三):中断机制
概述 之前讲解Thread类中方法的时候,interrupt()、interrupted()、isInterrupted()三个方法没有讲得很清楚,只是提了一下。现在把这三个方法同一放到这里来讲,因为这三个方法都涉及到多线程的一个知识点----中断机制。 Java没有提供一种安全、直接的方法来停止某个线程,而是提供了中断机制。中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而...原创 2019-03-16 21:14:44 · 113 阅读 · 0 评论 -
jdk集合源码阅读(二):ConcurrentHashMap分析(基于JDK1.8)
前言 面试中常常问到Hashtable、HashMap和ConcurrentHashMap的区别。大家都知道HashMap是线程不安全的,Hashtable和ConcurrentHashMap是线程安全的。Hashtable保证线程安全的方法,基本都是在操作集合的方法上加synchronized关键字,我们有必要知道ConcurrentHashMap底层实现和如何保证线程安全性。Concurren...原创 2018-12-21 14:01:15 · 294 阅读 · 0 评论 -
jdk集合源码阅读(三):ArrayList源码探讨(基于JDK1.8)
一,基本概念 ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。 ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线...原创 2018-12-21 15:22:11 · 176 阅读 · 1 评论 -
jdk集合源码阅读(四):LinkedList源码分析(基于JDK1.8)
一,LinkedList类结构 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable 通过LinkedList实现的接口可知,其支持队列操作,双向列表操作,能...原创 2018-12-21 15:23:34 · 134 阅读 · 0 评论 -
jdk集合源码阅读(五):Vector源码分析(基于JDK1.8)
一,Vector的继承结构 public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 二,Vector重要的成员变量 protected Object[] elementData; //...原创 2018-12-21 15:25:03 · 146 阅读 · 0 评论 -
jdk集合源码阅读(六):Stack源码分析(基于JDK1.8)
Stack简介 Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。 java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用。 Stack是线程安全的。建议在学习Stack之前先学习Vector类。 Stack结构...原创 2018-12-21 15:26:10 · 159 阅读 · 0 评论 -
Java多线程(十四):线程池
一.Java中的ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。 在ThreadPoolExecutor类中提供了四个构造方法: 1 2 ...原创 2019-03-16 21:15:30 · 173 阅读 · 0 评论 -
jdk集合源码阅读(一):HashMap分析(基于JDK1.8)
HashMap简介 HashMap 是一个散列表,哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。 它存储的内容是键值对(key-value)映射,该类继承于AbstractMap,实现了Map、Clonea...原创 2018-12-21 14:04:15 · 357 阅读 · 0 评论