【java源码分析-基本类型和包装类】教程文章相关的互联网学习教程文章

Java HashMap底层实现原理源码分析Jdk8【代码】【图】

在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,可能会将链表转换为红黑树,这样大大减少了查找时间。简单说下HashMap的实现原理:首先存在一个table数组,里面每个元素都是一个node链表,当添加一个元...

【JAVA】ThreadLocal源码分析【代码】【图】

ThreadLocal内部是用一张哈希表来存储: 1staticclass ThreadLocalMap {2staticclass Entry extends WeakReference<ThreadLocal<?>> {3/** The value associated with this ThreadLocal. */ 4 Object value;5 6 Entry(ThreadLocal<?> k, Object v) {7super(k);8 value = v;9 } 10 } 11privatestaticfinalint INITIAL_CAPACITY = 16; 12private Entry[] table; 13privateint ...

java 线程池 ThreadPoolExecutor 部分源码分析【代码】

首先放上参考链接,博主分析比较细致:https://fangjian0423.github.io/2016/03/22/java-threadpool-analysis/1. 首先必须清楚这么几个常量,主要思想是用一个int型表示线程池状态及数量,用int高三位表示状态,低29位表示线程数,所以,线程池最大线程数为 :1 << 29 - 1 而不是 1 << 32 - 1。2. 基于以上基础,线程池状态可以用 当前线程所表示的数字 c & ~((1 << 29) - 1) 可得线程状态, 当前线程所表示的数字 c & (1 << 29) -...

死磕 java集合之TreeMap源码分析(一)【代码】【图】

欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。简介TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。继承体系TreeMap实现了Map、SortedMap、NavigableMap、Cloneable、Serializable等接口。SortedMap规定了元素可以按key的大小来遍历,它定义了一些返回部分map的方法。public interface SortedMap<K,V> extends Map<K,V> {// key的比较器Comparator<? super K> comparator(...

Java异步编程——深入源码分析FutureTask【代码】【图】

Java的异步编程是一项非常常用的多线程技术。之前通过源码详细分析了ThreadPoolExecutor《你真的懂ThreadPoolExecutor线程池技术吗?看了源码你会有全新的认识》。通过创建一个ThreadPoolExecutor,往里面丢任务就可以实现多线程异步执行了。但之前的任务主要倾向于线程池,并没有讲到异步编程方面的内容。本文将通过介绍Executor+Future框架(FutureTask是实现的核心),来深入了解下Java的异步编程。万事从示例开始,我们先通过示...

Java并发-ConcurrentModificationException原因源码分析与解决办法【代码】【图】

一、异常原因与异常源码分析 对集合(List、Set、Map)迭代时对其进行修改就会出现java.util.ConcurrentModificationException异常。这里以ArrayList为例,例如下面的代码:ArrayList<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); //遍历1for (String s : list){if (s.equals( "3")) {list.remove(s); // error } } //遍历2 Iterator<String> it = list.iterator(); for (; it.hasNext()...

ArrayBlockingQueue源码分析-Java8【代码】

ArrayBlockingQueue原理介绍  ArrayBlockingQueue,是基于数组的阻塞队列,队列中的元素按照FIFO顺序。  创建ArrayBlockingQueue,是需要制定队列的容量的(不可省);指定队列容量后,会一次性创建capacity个长度的数组,用来存放队列元素;  需要注意的是,ArrayBlockingQueue使用的是循环数组来实现队列,也就是说,有takeIndex指向下一个出队元素,当takeIndex指向了capacity-1的位置(最后一个位置),那么元素出队后,...

wifi java源码分析【图】

wifisetting : wifimanager WiFienable:native 申明本地接口:jni 关联本地接口和底层实现:driver wifi实现2)Wifi启动流程 (1)使能Wifi (2) 扫描AP (3)连接 (4)获取IP地址 启动dhcp https://blog.csdn.net/lp542718520/article/details/76578235WPAS wpa_supplicant 原文:https://www.cnblogs.com/zeng-iauto/p/12022291.html

java ThreadGroup源码分析【代码】

使用: 1import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;2 3publicclass Test {4 5publicstaticvoid main(String[] args) {6 7 ThreadGroup tg = new ThreadGroup("threadGroup-001"); 8 9 Thread t1 = new Thread(tg, new MyThread()); 10 t1.start(); 1112 Thread t2 = new Thread(tg, new MyThread()); 13 t2.start(); 1415// 返回线程组中活动线程的估计数16 ...

Java-HashSet源码分析及示例【代码】【图】

纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹HashSet是一个没有重复元素的集合,HashSet是由HashMap实现的,不保证元素的顺序,并且HashSet允许使用null元素。HashSet不是线程安全的,当多个线程同时访问HashSet时,会出现问题,解决的方法是通过对自然封装该Set的对象执行同步操作来完成的。还可以使用Collections.synchronizedSet方法来包装set。Set s=Collectins.synchronizedSet(new Has...

Java集合源码分析之 LinkedList【代码】【图】

一、简介LinkedList是一个常用的集合类,用于顺序存储元素。LinkedList经常和ArrayList一起被提及。大部分人应该都知道ArrayList内部采用数组保存元素,适合用于随机访问比较多的场景,而随机插入、删除等操作因为要移动元素而比较慢。LinkedList内部采用链表的形式存储元素,随机访问比较慢,但是插入、删除元素比较快,一般认为时间复杂都是O(1)(需要查找元素时就不是了,下面会说明)。本文分析LinkedList的具体实现。 二、数据结...

Java并发编程之Semaphore信号量源码分析【代码】【图】

JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那么,Semaphore 的内部实现是怎样的呢?  Semaphore 信号量也是Java 中一个同步容器,与CountDownLatch 和 CyclicBarrier 不同之处在于它内部的计数器是递增的。为了能够一览Semaphore的内部结构,我们首先要看一下Semaphore的类图,类图,如下所示: 如上类图可以知道Semaphoren...

java集合源码分析(二):List与AbstractList【代码】【图】

概述 List 应该接口是 Collection 最常被使用的接口了。其下的实现类皆为有序列表,其中主要分为 Vector,ArrayList,LinkedList 三个实现类,其中 Vecotr 又拥有子类 Stack。从线程安全来说,List 下拥有线程安全的集合类 Vector;从数据结构来说,List 下拥有基于数组实现的 Vector 与 ArrayList,和基于链表实现的 LinkedList。本篇文章暂不讨论具体的实现类,而将基于 List 接口与其抽象类 AbstractList,了解 List 接口是如何...

java集合框架09——HashTable和源码分析

上一章我们学习了HashMap的源码,这一节我们来讨论一下HashTable,HashTable和HashMap在某种程度上是类似的。我们依然遵循以下步骤:先对HashTable有个整体的认识,然后学习它的源码,深入剖析HashTable。1.HashTable简介 首先看一下HashTable的继承关系java.lang.Object? java.util.Dictionary<K, V>? java.util.Hashtable<K, V>public class Hashtable<K,V> extends Dictionary<K,V>implements Map<K,V>, Cloneab...

java.util.TreeSet源码分析【代码】

publicclass TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.SerializableTreeSet的实现基于TreeMap,元素的顺序取决于元素自然顺序或者在被创建出来时提供的比较器。对于基本操作,add、remove、contains的时间复杂度为logn。不是线程安全的,如果在多线程环境下,必须被同步化,可通过一个object作为锁来同步,或者使用Collections.synchronizedSortedSet(new TreeSet(...));方法同步。迭代...