Java源码分析与思考
展示博主对java源码的理解,当然难免会有些不足之处,欢迎大家指出,基于jdk1.8
suye233
穷变
展开
-
Java并发容器——ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListMap类的总结
ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListMap类的总结原创 2018-12-18 22:28:50 · 703 阅读 · 0 评论 -
Java并发容器——阻塞队列源码分析、生产者消费者模式、CopyOnWriteArrayList、ConcurrentLinkedQueue类总结
Java在jdk1.6引入了并发容器阻塞队列,阻塞队列是一个统称,凡是实现了BlockingQueue接口的容器都可以称的上阻塞队列,它实现了生产者-消费者模式,在阻塞队列中出队列与入队列都有两种形式,阻塞的put与take方法以及定时获取的offer与poll方法原创 2018-12-18 17:42:30 · 736 阅读 · 0 评论 -
Java并发——线程池ThreadPoolExecutor类源码解析
线程池作为减少线程创建关闭开销的常用手段,一直被使用着,ThreadPoolExecutor类则是Java中内置的线程池中的一种原创 2018-12-17 11:42:22 · 740 阅读 · 0 评论 -
Java并发——FutureTask类源码解析
在线程执行的run方法是一个void方法,它是不返回任何结果与状态的,但是FutureTask可以用来在线程执行任务后,返回任务的结果。FutureTask类实现了Future接口的语义,利用Callable,即自定义任务来完成这一功能。原创 2018-12-15 17:05:00 · 490 阅读 · 0 评论 -
Java并发——循环栅栏CyclicBarrier源码解析
从CyclicBarrier类的名字来看,它是循环栅栏,是栅栏机制的一种实现,它在内部利用ReentrantLock锁以及Condition的线程协调机制来实现这一功能。原创 2018-12-14 21:32:31 · 598 阅读 · 0 评论 -
Java并发——闭锁CountDownLatch、信号量Semaphore类源码解析
CountDownLatch类是AQS框架闭锁机制的一种实现。Semaphore是AQS框架信号量机制的一种实现。它首先在创建时会定义一定的资源量,每个线程如果能从Semaphore里得到足够的资源,那么该线程就会得到执行,而如果得不到足够的资源,那么AQS会把线程置于同步队列中,来等待前面获得资源的线程执行完毕释放资源原创 2018-12-13 16:04:24 · 468 阅读 · 0 评论 -
Java并发——ReentrantLock可重入锁、ReentrantReadWriteLock读写锁源码解析
ReentrantLock类是Java并发包里可重入锁的实现,同时它的大部分功能交由同步器AQS框架完成,它是AQS独占锁的实现。ReentrantReadWriteLock中文名字叫做可重入读写锁,其内部含有两种锁,一种是读锁,另外一种是写锁。它规定了最多原创 2018-12-12 17:50:13 · 1088 阅读 · 0 评论 -
Java并发——LockSupport、Condition源码解析
LockSupport类是一个工具类,用来在显示锁里面替换Object类的wait、notify方法的。Condition在Java中是用于多线程协调通信的工具类,一般用于显示锁。在内置锁里面,wait方法必须在线程持有锁的时候才能对线程进行阻塞,但是LockSupport类却不一样,即使线程没有持有锁,它也能将该线程阻塞。原创 2018-12-11 17:58:39 · 234 阅读 · 0 评论 -
Java并发——CAS原子操作、java.util.concurrent.atomic原子变量类源码解析
比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。原创 2018-12-09 16:16:02 · 285 阅读 · 0 评论 -
Java并发——volatile关键字、有序性浅谈
volatile关键字是一种比锁机制稍弱点的同步机制,volatile变量会被编译器以及JVM运行时注意到是一个共享变量,被它修饰的变量具有两大特征:第一,保证了不同线程对该变量的可见性。被它修饰的变量在线程中被修改后会立马写入主存中,在Java内存模型中,volatile变量的写入操作与读取操作同时到达的时候,将先进行写入操作,来保证数据的一致性。原创 2018-12-06 21:18:04 · 275 阅读 · 0 评论 -
Java并发——synchronized关键字,内置锁解析,可见性,互斥性浅谈
Java中为了保证每个线程中的原子操作,引入了内置锁,或者称为监视器锁,其中,每个Java对象都可以作为一个实现锁的对象,synchronized关键字修饰的代码块被称为同步代码块,线程进入同步代码块自动获取内置锁,退出同步代码块则释放锁,不需要调用者考虑它的创建以及消除,但是得十分熟悉内置锁的机制。原创 2018-12-06 12:18:31 · 675 阅读 · 0 评论 -
Java并发——ThreadLocal、ThreadGroup类源码解析
即线程范围之间如何实现数据的共享。其实很简单,利用一个Map来存贮,键存贮线程的名字、id等数据,而值则存贮着该线程对应共享的数据,将该Map传进对应的线程就可以实现数据的共享了,但是得注意同步。防止出现"脏数据"。而ThreadLocal类的存贮策略与上述相似,但是它只保存着每个线程的对应的本地数据,一个线程并不能访问ThreadLocal里另外一个线程保存的数据。说了这么多,还没正式的介绍ThreadLocal类,中文名是本地线程类,原创 2018-11-28 20:51:20 · 402 阅读 · 0 评论 -
Java并发——Thread类源码解析、线程初探
线程相较于进程,它是轻量级的,并且一个进程可以包含多个线程,这多个线程之间共享该进程的资源,且每个线程自己独占一份内存,这个空间叫做线程栈,是由系统创建该线程时创建的,主要是保存线程中的自定义的数据等。注意的是,线程依托于进程,当该进程消亡时,进程内所有的线程也会跟着消亡。而Java中的线程是抢占式的原创 2018-11-27 22:49:24 · 361 阅读 · 0 评论 -
Java源码分析——java.util工具包解析(五)——UUID、Base64、内置观察者模式Observer接口、EventListener、RandomAccess
对UUID、Base64、内置观察者模式Observer接口、EventListener、RandomAccess的使用以及一些思考原创 2018-11-25 16:23:52 · 339 阅读 · 0 评论 -
Java源码分析——java.util工具包解析(四)——四大引用类型以及WeakHashMap类解析
WeakHashMap是Map的一种很独特的实现,从它的名字可以看出,它是存贮弱引用的映射的,先来复习一下Java中的四大引用类型: 1. 强引用:我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。强引用的对象垃圾回收器绝不会回收它。当内存空间不足,jvm宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 2. 软引用:软引用是当jvm中内存不够的情况下会回收其对象,在内存充足的情况下与强引用别无二样。原创 2018-11-24 17:14:03 · 227 阅读 · 0 评论 -
Java源码分析——java.util工具包解析(三)——HashMap、TreeMap、LinkedHashMap、Hashtable类解析
Map,中文名字映射,它保存了键-值对的一对一的关系形式,并用哈希值来作为存贮的索引依据,在查找、插入以及删除时的时间复杂度都为O(1),是一种在程序中用的最多的几种数据结构。Java在java.util工具包中实现了Map接口,来作为各大Map实现类的规范,其中主要的Map实现类有三个,分别是:HashMap、TreeMap以及LinkedHashMap类原创 2018-11-23 15:16:15 · 340 阅读 · 0 评论 -
Java源码分析——java.util工具包解析(二)——HashSet、TreeSet、LinkedHashSet类解析
Set,即集合,与数学上的定义一样,集合具有三个特点:无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。   &...原创 2018-11-21 22:14:52 · 201 阅读 · 0 评论 -
Java源码分析——java.util工具包解析(一)——ArrayList、LinkedList、Vector类解析
List列表类与Set集合类的共同源头是Collection接口,而Collection的父接口是Iterable接口,在Collection接口下又实现了三个常用的接口以及一个抽象方法,分别为Queue接口、List接口、Set接口以及AbstractCollection抽象类原创 2018-11-20 22:24:49 · 207 阅读 · 0 评论 -
Java源码分析——System类解析
System类是在Java程序中作为一个标准的系统类,实现了控制台与程序之间的输入输出流,系统的初始化与获取系统环境变量、数组的复制、返回一个精准的时间以及一些简单的对虚拟机的操作等。原创 2018-11-19 20:36:01 · 557 阅读 · 0 评论 -
Java源码分析——Throwable、Exception、Error类解析
在Java中,错误分为两种,一种是jvm能处理的错误,叫做异常,Java中表示Exception类;而另外一种则是jvm不能处理的错误,叫做错误,Java中表示为Error类。原创 2018-11-18 18:48:03 · 1805 阅读 · 3 评论 -
Java源码分析——包装类与Void类解析
在Java中,有着8种基本类型,其对应着8种包装类型,分别为:Integer、Long、Short、Boolean、Float、Double、Byte以及Character类,这8种包装类型分别封装了对应类型的常用操作以及一些优化操作,比如包装类的缓存,自动装箱等原创 2018-11-16 13:55:02 · 1377 阅读 · 0 评论 -
Java源码分析——String、StringBuffer、StringBuilder类(二)——AbstractStringBuilder抽象类
在Java中,关于字符串类分为两种,一种是上篇博客讲的String类,即不可变字符串类,另外一种则是可变字符串类,原创 2018-11-15 17:10:04 · 252 阅读 · 0 评论 -
Java源码分析——java.lang.reflect反射包解析(三) 动态代理、Proxy类、WeakCache类
代理模式是一个经常被各种框架使用的模式,比如Spring AOP、Mybatis中就经常用到,当一个类访问另外一个类困难时,可通过一个代理类来间接访问,在Java中,为了保证程序的简单性,代理类与目标类需要实现相同的接口。也就是说代理模式起着一个中转站的作用原创 2018-10-31 16:09:06 · 787 阅读 · 0 评论 -
Java源码分析——java.lang.reflect反射包解析(二) Array类,数组的创建
在Java中,引用类型中有那么几个特殊的类,Object类是所有类的起源、Class类定义所有类的抽象与行为、ClassLoader类实现了类从.class文件中加载进jvm,而Array数组类,则实现了数组手动的创建原创 2018-10-30 15:07:09 · 636 阅读 · 0 评论 -
Java源码分析——java.lang.reflect反射包解析(一) AccessibleObject、ReflectionFactory、Filed、Method、Constructor类
Java的反射机制一直是被人称赞的,它的定义是:程序在运行中时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。简单的来说就是可以通过Java的反射机制知道自己想知道的类的一切信息。原创 2018-10-29 17:11:03 · 1551 阅读 · 2 评论 -
Java源码分析——Class类、ClassLoader类解析(三) 类加载器、实现自定义类加载器
在java中,加载一个类是通过ClassLoader类来执行的,也就是类加载器完成。java中所有的类,都必须加载进jvm中才能运行,这个加载的意思是指将.class文件加载进jvm中,返回一个Class类对象的过程。类加载器(class loader)是一个负责加载JAVA类(classes)的对象,ClassLoader类是一个抽象类,需要给出类的二进制名称,class loader尝试定位或者产生一个class的数据,一个典型的策略是把二进制名字转换成文件名然后到文件系统中找到该文件原创 2018-10-28 19:06:14 · 235 阅读 · 0 评论 -
Java源码分析——Class类、ClassLoader类解析(二) 类的识别、Modifier类、TypeVariable、GenericDeclaration接口
在类的加载与实例化的时候,如何识别类、接口、注解以及数组是个值得思考的问题,不仅是这些常用的引用类,还包括类、接口等的public、private、defalut、static等修饰符,以及识别一个泛型类或者接口。原创 2018-10-26 22:37:57 · 446 阅读 · 0 评论 -
Java源码分析——Class类、ClassLoader类解析(一) 类的抽象与获取
Class类是集合了所有类的属性、行为的抽象,描述类的修饰、类的构造器、类的字段以及类的方法等抽象,这里的类是指广泛的类,包括了接口、注解、数组等。简单的来说,它涵盖了所有类的共性,所以研究它时,应当从所有类的共性出发,来探讨其中的内容。虽然Class类是所有类的抽象,但是它依旧是与其它类一样具有共同...原创 2018-10-25 22:47:51 · 1247 阅读 · 0 评论 -
Java源码分析——Object类解析,一切类的源头
Java语言类的起始点源于Object类,其它类都直接或间接继承Oject类,可以说Object类是一切类的源头。下面来谈下Object类的内部的编码以及简单的阐述下其中的native本地的方法...原创 2018-10-24 18:11:13 · 279 阅读 · 0 评论 -
Java源码分析——String、AbstractStringBuilder、StringBuffer、StringBuilder类(一)——String类、intern方法
在Java中,与C++一样,也是亲自封装了字符串,命名为String类,用来对字符串的常用操作,其中Java也仿照String类设计出了其它的几个字符串类,用来处理String类不能处理的场景,分别是StringBuffer类与StringBuilder类原创 2018-10-24 13:39:22 · 186 阅读 · 0 评论