![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入Java
VicterTian
这个作者很懒,什么都没留下…
展开
-
java中创建线程的三种方法以及区别
文章目录概述继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程三种创建线程方法对比概述Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程下面...原创 2018-12-10 09:03:10 · 235 阅读 · 1 评论 -
Thread和Runnable实现多线程的区别
Thread和Runnable实现多线程的区别Java中实现多线程有两种方法:继承Thread、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:可以避免由于Java的单继承特性而带来的局限增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的适合多个相同程序的线程区处理同一资...转载 2018-12-11 08:12:31 · 185 阅读 · 0 评论 -
如何正确的停止一个线程
通常定义一个标记,来判断标记的状态停止线程的执行/** * @author VicterTian * @version V1.0 * @Date 2018/12/11 */public class ThreadTest09 { public static void main(String[] args) { //Runnable r1 = new Processor(); P...原创 2018-12-11 10:38:32 · 540 阅读 · 0 评论 -
Java中try catch finally语句中含有return语句的执行情况
情况一(try中有return,finally中没有return):public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static int test(){ int num = 10; try{ System.out.pr...原创 2018-12-17 13:32:19 · 168 阅读 · 0 评论 -
深入理解Java常量池
jvm虚拟内存分布:程序计数器是jvm执行程序的流水线,存放一些跳转指令本地方法栈是jvm调用操作系统方法所使用的栈虚拟机栈是jvm执行java代码所使用的栈方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置虚拟机堆是jvm执行java代码所使用的堆Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。所谓静态常量池,即*.clas...原创 2018-12-11 20:27:28 · 297 阅读 · 0 评论 -
Java中类的加载顺序(ClassLoader)
在谈ClassLoader之前,先介绍一个常见异常:ClassNotFoundExcetpion ,原因:就是找不到指定的class。常见的场景:调用class的forName方法时,找不到指定的类ClassLoader 中的 findSystemClass() 方法时,找不到指定的类ClassLoader 中的 loadClass() 方法时,找不到指定的类对于这个异常,它实质涉及...转载 2019-02-12 10:12:48 · 600 阅读 · 1 评论 -
单例模式的那些事
文章目录单例模式单例的特点单例模式的7种写法第一种(懒汉,线程不安全):第二种(懒汉,线程安全):第三种(饿汉):第四种(饿汉,变种):第五种(静态内部类):第六种(枚举):第七种(双重校验锁):单例模式真的能够实现实例的唯一性吗?答案是否定的!如何破坏单例反射序列化和反序列化单元素枚举类型总结单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型...转载 2019-02-12 10:13:11 · 307 阅读 · 0 评论 -
Java注解实现以及部分参数说明
Java注解详细说明今天面试过程中遇到了一个问题:谈谈注解的底层实现。由于本人只写过几个自定义注解,在复习过程中也忽略了这一部分,所以只回答了使用过一些自定义注解。然后面试官又问了一些反射的问题。面试结束经过百度后才知道,注解的底层实现就是用到了反射。所以今天来补上这一部分内容。首先,注解是没有行为的,只能有数据。让其实现某些行为必须有实例(也就是代理对象),再用反射技术实现某些行为。通过对...原创 2019-04-20 11:09:46 · 963 阅读 · 0 评论 -
HashMap初始化容量
HashMap初始化容量《阿里巴巴Java开发规约》中有提到:【推荐】集合初始化时,指定集合初始值大小。说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可:public HashMap (int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR);}那么H...原创 2019-07-21 14:23:54 · 1132 阅读 · 0 评论 -
Java实现 Serializable 序列化
深度理解Java实现 Serializable 序列化概念把对象转换为直接序列的过程叫对象的序列化把字节序列恢复为对象的过程叫对象的反序列化用途对象持久化跨网络数据交换,远程过程调用对象持久化意味着一个对象的生命周期可以不取决于程序是否运行,实现序列化的对象可以生存在程序的调用之间。通过一个序列化的对象写在磁盘中,然后再调用期间恢复这个对象就可以实现对象持久化的效果序列化可以弥...原创 2019-07-21 14:27:07 · 437 阅读 · 0 评论 -
一致性Hash算法
一致性Hash算法为什么使用一致性Hash我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示:同样类似于数据库,当单表数据大于500W的时候需要对其进行分库分表,当数据量很大的时...原创 2019-09-19 16:29:54 · 519 阅读 · 0 评论 -
JDK1.8 ConcurrentHashMap源码分析
文章目录ConcurrentHashMap数据结构类的继承关系类的内部类重要的属性类的构造函数ConcurrentHashMap()型构造函数ConcurrentHashMap(int)型构造函数ConcurrentHashMap(Map<? extends K, ? extends V>)型构造函数ConcurrentHashMap(int, float)型构造函数Concurren...原创 2018-12-10 08:38:15 · 1820 阅读 · 1 评论 -
JDK1.8 Vector源码分析
Vector简介Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector没有实现Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess...原创 2018-12-14 20:52:01 · 178 阅读 · 2 评论 -
JDK1.8 HashMap源码分析
HashMap简介HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静...原创 2018-12-09 17:39:28 · 183 阅读 · 0 评论 -
面向对象四大特性
面向对象主要有四大特性传统意义上,面向对象有三大特征:封装、继承、多态。但我支持面向对象“四大特征”说法,先来说一下抽象抽象从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃,这种思维过程,称为抽象。在OOP的编程思想中,抽象更是开发者的核心素质之一,体现了开发者对业务的建模能力,以及对架构的宏观掌控力。面向对象思维,以对象模型为核心,丰富模型...原创 2018-12-08 14:00:56 · 2019 阅读 · 2 评论 -
String,StringBuffer与StringBuilder的区别
StringString在java编程中广泛应用,首先从源码进行分析从这我们可以得知,String底层是一个final类型的字符数组,所以String的值是不可变的,每次对String的操作都会生成新的String对象,造成内存浪费而StringBuffer和StringBuilder就不一样了,他们两都继承了AbstractStringBuilder抽象类,从AbstractString...原创 2018-12-08 15:13:04 · 17520 阅读 · 11 评论 -
java集合框架综述
文章目录集合框架图总体分析Collection接口List接口ArrayListLinkedListVectorStackSet接口HashSetLinkedHashSetTreeSetMap接口HashMapLinkedHashMapTreeMapIterator 与 ListIterator详解IteratorListIterator异同点ArrayList和LinkedListHashTab...原创 2018-12-12 17:24:24 · 180 阅读 · 0 评论 -
对hashcode和equal方法的理解
对hashcode和equal方法的理解如何理解hashCode的作用:Object.hashCode不可以代表内存地址改写equals时总是要改写hashCodeJava中的集合(Collection)是整个集合框架的基础,它里面存储一组对象,表示不用的Collections,他的作用是维护一组对象的基本接口共两类,一类是List,另一类是Set。前者集合内的元素是有序可重复的,后者无需不可重...原创 2018-12-06 13:53:57 · 588 阅读 · 0 评论 -
为什么HashCode对于对象如此的重要
Hash表数据结构常识:哈希表基于数组。缺点:基于数组的,数组创建后难以扩展。某些哈希表被基本填满时,性能下降得非常严重。没有一种简便得方法可以以任何一种顺序遍历表中数据项。如果不需要有序遍历数据,并且可以提前预测数据量的大小,那么哈希表在速度和易用性方面是无与伦比的。为什么HashCode对于对象是如此的重要:一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那...原创 2018-12-06 14:16:52 · 997 阅读 · 0 评论 -
ArrayList和LinkedList的区别、优缺点以及应用场景
ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删改查进行操作,那么他们区别、优缺点应用场景都有哪些呢?我们通过源码和数据结构来说明一下ArrayList和LinkedList的大致区别如下:ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。对于随机访问的get和set方法,Array...原创 2018-12-09 09:17:21 · 61629 阅读 · 16 评论 -
深入理解JDK1.8 Lambda
从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这种编程风格。在此之前我们都在写匿名内部类干这些事,但有时候这不是好的做法.这样的做法是十分重量级的,并且十分冗余,无法对控制流进行抽象。用策略者设计模式简历一部分冗余后还是存在较多缺点,这时就应该选...原创 2018-12-13 22:04:54 · 871 阅读 · 0 评论 -
JDK1.8 ArrayList源码分析
ArrayList简介ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功...原创 2018-12-09 11:11:43 · 760 阅读 · 0 评论 -
JDK1.8 String源码分析
String源码分析从一段代码说起:public void stringTest(){ String a = "a"+"b"+1; String b = "ab1"; System.out.println(a == b);}大家猜一猜结果如何?如果你的结论是true。好吧,再来一段代码:public void stringTest(){ String ...原创 2018-12-14 18:16:43 · 224 阅读 · 0 评论 -
JDK1.8 LinkedList源码分析
LinkedList简介LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作LinkedList 实现 List 接口,能对它进行队列操作LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆...原创 2018-12-09 15:07:35 · 333 阅读 · 0 评论 -
JDK1.8 HashMap源码解析
HashMap是求职面试中名副其实的“明星”,基本上每一加公司的面试多多少少都有问到HashMap的底层实现原理、源码等相关问题,这篇文章将会按以下顺序来组织:HashMap源码分析(JDK8,通俗易懂)HashMap面试“明星”问题汇总,以及明星问题答案HashMap的成员属性源码分析public class HashMap<K,V> extends AbstractMa...原创 2018-12-09 17:02:00 · 233 阅读 · 0 评论 -
Java的跨平台实现原理(Write Once,Run Anywhere)
Java的跨平台实现原理为什么要跨平台在不同点操作系统之间,使用不同的指令集对计算机进行控制。如果没有跨平台,我们需要对window,Linux,unix等操作系统的指令集分别进行特定的语言开发Java如何实现在不同的操作系统之间,提供不同的虚拟机,让虚拟机实现编译后的字节码文件到实际操作系统指令集的转换。Java只提供统一的开发接口,实现统一的编码规范思想运用实际是对于底层的差异性,...原创 2018-12-08 14:00:33 · 433 阅读 · 0 评论