
jdk源码解析
文章平均质量分 85
水银湖
这个作者很懒,什么都没留下…
展开
-
a.ArrayList源码解析(1.7)
list原创 2016-09-09 16:24:15 · 260 阅读 · 0 评论 -
synchronized实现原理
实现原理synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的class对象同步方法块,锁是括号里面的对象当一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异常时...转载 2018-03-23 15:00:10 · 149 阅读 · 0 评论 -
java监控之ManagementFactory分析
The ManagementFactory class is a factory class for getting managed beans for the Java platform. This class consists of static methods each of which returns one or more platform MXBeans representing th...转载 2018-02-12 11:08:56 · 363 阅读 · 0 评论 -
hashmap环形链表
导读:经过前面的博客总结,可以知道的是,HashMap是有一个一维数组和一个链表组成,从而得知,在解决冲突问题时,hashmap选择的是链地址法。为什么HashMap会用一个数组这链表组成,当时给出的答案是从那几种解决冲突的算法中推论的,这里给出一个正面的理由: 1,为什么用了一维数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点转载 2017-12-26 19:12:42 · 2164 阅读 · 1 评论 -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要转载 2017-10-24 16:58:53 · 204 阅读 · 0 评论 -
多线程之并发队列
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。 注:什么叫线程安全?这个首先要明确。线程安全的类 ,指的是类内共享的全局变量的转载 2017-08-17 15:29:54 · 633 阅读 · 0 评论 -
java 增强for循环中的删除问题
foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在 Java 中还有比如 泛型、自动拆箱、自动装箱、内部类、枚举等等。 foreach 是用来对数组或者集合进行遍历的语法。具体语法如下: 1 2 3翻译 2017-06-28 14:45:35 · 11974 阅读 · 0 评论 -
为什么说String是不可变的
1.什么是不可变? 简单的例子: String s1= “abc”; String s1=s1; s1= “def”; 此时s1变化了吗?变了!s1的地址从指向 “abc”变成指向 “def”; 重要的不在这里,“abc”本身并没有被改变!s2也没有被改变 2.怎么做到的? 两个final ,一个在String的类修饰符,一个是String内部保存数据的数组va原创 2017-06-07 18:34:19 · 349 阅读 · 0 评论 -
字符串相加
javac Test 编译文件 javap -c Test 查看虚拟机指令 实验一:纯字符串 [java] view plain copy public class Test { public static void main(String args[]) { String str转载 2017-06-08 09:32:37 · 3660 阅读 · 0 评论 -
可重入锁
可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。 在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁,之所以设计成可重入锁是为了避免死锁 package com.mercurylake.test.lock; import java.util.concurrent.locks.ReentrantL原创 2017-02-15 10:26:58 · 322 阅读 · 0 评论 -
c.hashMap源码解析(1.7)
Hashmap的实现方法,俗称拉链法,其实是一种散列结构原创 2016-09-12 17:26:14 · 581 阅读 · 0 评论 -
hashMap与ConcurrentHashmap
ConcurrentHashMap的简要总结: 1、public V get(Object key)不涉及到锁,也就是说获得对象时没有使用锁; 2、put、remove方法要使用锁,但并不一定有锁争用,原因在于ConcurrentHashMap将缓存的变量分到多个Segment,每个Segment上有一个锁,只要多个线程访问的不是一个Segment就没有锁争用,就没有堵塞,各线程用各自转载 2016-09-19 17:27:07 · 246 阅读 · 0 评论 -
f.ConcurrentHashMap源码解析(1.7)
作为juc包的门面类,了解Concurrenthashmap是了解高并发的开端 区别于HashMap,它支持了并发操作,也就是所谓的线程安全,线程安全的实现方式在这里是加锁,为了保证效率,使用了锁分离细化了锁粒度 下面一张图很好地解释了锁分离的实现方式 大的table存放的并不是具体的数据,而是存放的段(segment),每一个segment又是一张table,允许并发操作的关键就在原创 2016-09-19 14:51:35 · 583 阅读 · 0 评论 -
d.linkedhashMap源码解析(1.7)
相对而言,linkedhashMap要比TreeMap更加重要 有一些逻辑以及LRU算法值得深究 public class LinkedHashMap extends HashMap implements Map 看类的声明,可以注意的是linkedhashMap是哈希Map的子类,也重写了在Hashmap里面的有一些有空方法体的方法 属性 //作为Linkedhas原创 2016-09-13 14:23:37 · 308 阅读 · 0 评论 -
e.HashSet与LinkedHashSet源码解析(1.7)
java容器类分为两大类,一部分是Map,用来存放键值对。另一部分是Collection,用来存放独立的元素。Collection分为List与Set,List可以有重复顺序,Set则不行 我们要分析的HashSet与LinkedHashSet底层都是用的HashMap与LinkedHashMap的key来实现的,这里将具体分析下具体的封装 public class HashSet e原创 2016-09-18 10:44:13 · 290 阅读 · 0 评论 -
java线程池
线程池的特点如我们所知,减少维护对象创建销毁等的开销,控制并发数,对线程进行简单管理 java中线程池的使用框架实现的 Executor,Executors,ExecutorService,ThreadPoolExecutor ,Callable和Future、FutureTask等。 看源码的话Executor是个总的接口,只有一个方法 public interface Executor转载 2016-09-14 11:26:42 · 281 阅读 · 0 评论 -
b.LinkedList源码解析(1.7)
关于跟ArrayList的比较的最多的一个结构,本文除了本身源码之外,还将着重分析下两者的特点 首先,几层了朝鲜队列,以及实现了List与Deque public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable原创 2016-09-12 10:07:39 · 298 阅读 · 0 评论 -
线程池
为什么用线程池 博客地址 http://blog.youkuaiyun.com/qq_25806863 原文地址 http://blog.youkuaiyun.com/qq_25806863/article/details/71126867 有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长...转载 2018-09-28 19:18:15 · 212 阅读 · 0 评论