
JavaCore
文章平均质量分 69
Ethan Zeng
生命不息,学习不止
展开
-
Java核心 -- 基本程序设计结构
final关键字修饰变量:关键字final修饰变量,表示这个变量只能被赋值一次,一旦被赋值之后,就不能再更改了,即final修饰变量时,是用来定义常量的,常量名应该全大写。例如如下代码:final double PI = 3.14;PI = 24.1; // error: cannot assign a value to variable 'PI'修饰方法:可被子类继承,但是不能被子...原创 2019-02-16 17:20:46 · 210 阅读 · 0 评论 -
Java中线程安全的单例模式
第三种:用“双重检查加锁”,在getInstance中减少使用同步public class Singleton { private volatile static Singleton uniqueInstance = null; public static void main(String[] args){ Singleton singleton = Si...原创 2019-03-12 15:37:01 · 1438 阅读 · 2 评论 -
ThreadLocal 源码分析
引言在 jdk/jre/lib/rt.jar 字节码包中,可以看到关于ThreadLocal类及其内部类编译后的文件;通过本文的对相关类的源码分析,旨在理清Thread、ThreadLocalMap、Entry、ThreadLocal之间的关系ThreadLocalMap类分析ThreadLocalMap是ThreadLocal中的内部类,它是实现ThreadLocal类功能的...原创 2019-03-17 10:26:32 · 333 阅读 · 0 评论 -
红黑树与TreeMap源码分析
红黑树TreeMap源码分析参考文献Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例 史上最清晰的红黑树讲解(上) 漫画:什么是红黑树?...原创 2019-03-20 21:36:36 · 302 阅读 · 0 评论 -
HashMap、Hashtable、ConcurrentHashMap源码分析和对比
HashMapHashtableConcurrentHashMap总结对比原创 2019-03-17 16:23:50 · 203 阅读 · 0 评论 -
Java数据流之字节级输入输出类
一,InputStream和OutputStreamI/O流类的应用是成对的每个写数据的输出类,都有一个相对应的读数据的输入类;通过字节级流出类写入的数据能被字节级输入流读取,而被诸如纯文本编辑器之类的应用程序写入的数据可能与字节级数据流数据不兼容;InputStream及其子类InputStream是一个抽象类,BufferedInputStream:增加输入到另一个输入的缓冲功能,当读或原创 2017-04-14 09:55:43 · 811 阅读 · 0 评论 -
Java 数据流之File类
一,文件类File类File类构造方法第一种:File(String path) ,path指明新创建File对象对应的文件或目录的路径,如: File f1=new File("C:\myProgram\Java"); //绝对路径下新建文件,指定目录 File f2=new File(\myProgram\Java"); //相对路径下新建文件,当前目录下的子目录myProgram原创 2017-04-12 23:03:48 · 1040 阅读 · 0 评论 -
Java重载,继承,覆盖
一,重载重载含义对一个方法多次定义,即方法名相同,输入参数不同;输入参数不同:参数数量不同/参数类型不同/参数次序不同(次序不同前提是有不同的数据类型,不然次序无意义);重载对所有的成员方法都适用(包括构造方法,但不包括finalize方法);重载使用技巧当重载一个构造方法时,首先要提供一个尽可能普通的版本(输入参数最全面的版本),其他版本可使用this(参数)方式调用该版本的构造方法,取代原创 2017-04-11 16:37:14 · 389 阅读 · 0 评论 -
AbstarctQueuedSynchronizer 源码分析和框架思想
引言Node类Node类是AQS中的final内部类,static final class Node { static final Node SHARED = new Node(); /** 共享模式的Node */ static final Node EXCLUSIVE = null; /** 互斥模式的Node */ volat...原创 2019-03-17 17:18:05 · 263 阅读 · 0 评论 -
Java synchronized阻塞的同步队列现象分析
public class Singleton { public static void main(String[] args) throws InterruptedException { for (int i=0; i<10; i++){ new Thread(new QueueThread()).start(); ...原创 2019-03-12 20:02:22 · 2187 阅读 · 2 评论 -
一致性Hash算法分析与实现
关于一致性Hash算法的原理讲解,可先阅读:缓存算法与应用详解;引言在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.典型的应用场景是: 有N台服务器提供缓存...原创 2019-03-20 20:29:42 · 451 阅读 · 0 评论 -
《Java并发编程实战》线程安全性和对象共享
引言多进程和多线程的优点? 多线程的优势与风险? 竞态条件是什么?早期计算机中还不存在操作系统,一台机器从头到尾只能执行一个程序,并且这个程序能访问所有的计算机资源。操作系统的引入是的计算机“同时”能运行多个程序,不同程序都在单独的进程中运行:操作系统为各个独立的进程分配各种资源,包括内存、文件句柄以及安全证书等。不同进程之间可以通过一些粗粒度的通信机制来交换数据,包括:套接字、信号...原创 2019-03-16 12:30:13 · 465 阅读 · 0 评论 -
LinkedList 双向链表源码分析
目录LinkedList介绍 Node内部类 LinkedList源码分析LinkedList 介绍在分析缓存淘汰算法LRU时,双向链表是其中一种实现方式,动手实现时才发现head和tail在没有其他结点时的处理很别扭,所以就研究下LinkedList的源码,找点思路;首先看看关于LinkedList的简介LinkedList是一个继承于AbstractSequentia...原创 2019-03-20 13:57:07 · 483 阅读 · 0 评论 -
Java核心 -- 反射
能够分析类能力的程序称为反射。反射可以用来:在运行时分析类的能力 在运行时查看对象,例如,编写一个toString方法供所有类使用 实现通用的数组操作代码 利用Method对象在讨论反射之前,需要先了解Java中一个非常基础重要,但又容易让人忽略的类,即Class类(关于Class类的讲解,可以查看《Java核心 -- Class类》)...原创 2019-02-17 14:45:44 · 148 阅读 · 0 评论 -
Java核心 -- Class类
导论在周志明的《深入理解Java虚拟机》书中的类加载机制章节上有提到,在“类加载”过程的加载阶段,虚拟机需要完成以下三件事:通过一个类的全限定名来获取定义此类的二进制字节流; 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口; 在《Java核心技术 卷一》关于反射...原创 2019-02-17 14:53:19 · 389 阅读 · 0 评论 -
Java核心 -- 泛型
导论从Java程序设计语言1.0版发布以来,变化最大的部分就是泛型。专家组花费了5年左右的时间来定义规范和测试实现。使用泛型机制编写的程序代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。泛型对于集合类尤其有用。例如,ArrayList就是一个无处不在的集合类。 从一个例子说起import java.util.ArrayLi...原创 2019-02-17 17:46:21 · 248 阅读 · 0 评论 -
Java核心 -- 数据结构和集合类
地方原创 2019-02-17 21:57:56 · 167 阅读 · 0 评论 -
Java核心 -- 抽象类和接口
导论接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。接口被用来建立类与类之间的协议。interface不仅仅是一个极度抽象的类,它允许人们通过创建一个能够被向上转型为多种基类的类型,来实现某种类似多重继变种的特性。抽象类是普通类与接口之间的中庸之道,尽管在构建具有某些未实现方法的类时,你的第一想法可能是创建接口,但是抽象类仍旧是用于此目的的一种重要而必须的工具,因...原创 2019-02-17 21:58:58 · 201 阅读 · 0 评论 -
Java核心 -- 多态
参考资料:从JVM角度看Java多态导论在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。多态也称作动态绑定、后期绑定或者运行时绑定,其作用是消除类型之间的耦合关系。 -- “编写只与基类打交道的程序”Java是通过对方法的动态绑定来实现多态。 向上转型:对象既可以作为它自己本身的类型使用,也可以作为它的基类型使用,这种把对某个对象的引用视为对其...原创 2019-02-18 16:58:51 · 227 阅读 · 0 评论 -
CAS自旋volatile变量
---------------------作者:wxy941011来源:优快云原文:https://blog.youkuaiyun.com/wxy941011/article/details/80822949版权声明:本文为博主原创文章,转载请附上博文链接!(侵删)我们先来看一下AtomicInteger类的getAndIncrement的源代码:public fin...转载 2019-03-13 21:01:45 · 615 阅读 · 0 评论 -
setState 和 compareAndSetState方法作用分析
AQS中有三个protected方法:getState, setState, compareAndSetState。这三个方法是AQS中提供给自定义同步器来获取state状态的三个基本工具方法,那么setState和compareAndSetState都是用来修改状态的,两者有什么不一样,为什么两者能共存,其各自使用场景分别是什么?分析AQS和ReentrantLock的源码可知:co...原创 2019-03-13 22:20:35 · 4301 阅读 · 0 评论 -
利用wait()和notify()方法实现多线程的“有序”执行
例题描述:建立三个线程,A线程打印100次A,B线程打印100次B,C线程打印100次C,要求线程同时运行,交替打印100次ABC。这个问题用Object的wait(),notify()就可以很方便的解决。public class HelloJava{ static class OrderedThread implements Runnable{ private ...原创 2019-03-11 21:20:01 · 836 阅读 · 0 评论 -
wait()和notify()详解
等待通知机制基本用法:public class Test { public static void main(String[] args) throws InterruptedException { Thread waitThread = new Thread(new Runnable() { @Override p...原创 2019-03-12 21:28:58 · 1930 阅读 · 2 评论