![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java 基础知识进阶
Java基础知识进阶
燕归来兮_
以梦为码,不负韶华,更多内容欢迎访问 个人博客网站 https://www.zhoutao123.com
展开
-
可重入锁 ReentrantLock 使用与实现原理
原文链接 https://www.zhoutao123.com/page/book/java/category/qhg7g7更多文章欢迎访问 https://www.zhoutao123.com1、可重入锁与ReentrantLock可重入锁指的是该锁能够在支持在同一个线程下对资源的重复加锁。JDK 提供了ReentrantLock来实现可重入锁,众所周知,Synchronized 是支持可重入锁的,并且是隐式的支持,适用范式如下// 伪代码synchronized(this){ ..原创 2020-07-15 10:31:54 · 214 阅读 · 0 评论 -
AbstractQueueSynchronizer 独占式超时获取同步状态
原文链接 https://www.zhoutao123.com/page/book/java/category/ui8wdw更多文章欢迎访问 https://www.zhoutao123.com通过调用同步器的 public final boolean tryAcquireNanos(int arg, long nanosTimeout) 放,可以实现超时获取同步状态的编程范式模型,即在指定时间内获取到同步状态,超过一定时间返回false,获取同步状态成功则返回true,这是在JDK1.5..原创 2020-07-12 18:18:49 · 148 阅读 · 0 评论 -
AbstractQueueSynchronizer 共享式同步状态获取与释放原理
原文链接 https://www.zhoutao123.com/page/book/java/category/bxc17x更多文章欢迎访问 https://www.zhoutao123.com共享式获取同步状态和独占式获取同步状态主要的区别就是能够在同一时刻有多个线程获取到同步状态。以常见的文件读写实例说明,如果一个线程正在进行写操作,那么这一时刻其他线程的读操作均被阻塞;反之如果一个线程正在进行读操作,其他线程的操作均能正常获取到状态,但是写操作将被阻塞。这个例子中读操作就是共享式访问..原创 2020-07-12 18:17:09 · 125 阅读 · 0 评论 -
AbstractQueueSynchronizer 独占式同步状态的获取与释放原理
原文链接 https://www.zhoutao123.com/page/book/java/category/rcuy1l更多文章欢迎访问 https://www.zhoutao123.com上文中(Lock 与 队列同步器 AbstractQueueSynchronizer) 详细的描述了同步器的模式,自定义同步器的方式以及其底层实现-同步队列,本文将着重讲解独占式同步状态的获取与释放的原理。1、同步状态的获取1.1 从 acquire 方法说起上文中定义的Metux锁中loc..原创 2020-07-12 18:14:53 · 106 阅读 · 0 评论 -
Lock 与 队列同步器 AbstractQueueSynchronizer
原文链接 https://www.zhoutao123.com/page/book/java/category/geqior更多文章欢迎访问 https://www.zhoutao123.com1、Lock 接口的范式以及Synchronized的区别Lock 接口是Java SE 5.0 提供的接口,用于描述定义Java中的锁。一个锁能够防止多个线程同时访问共享的资源(一些特殊的锁除外,比如读写锁)。在Lock接口出现之前,Java程序一般使用Synchronized关键字实现同步操作..原创 2020-07-12 18:13:04 · 101 阅读 · 0 评论 -
多线程的应用-简单实现数据库连接池
原文链接 https://www.zhoutao123.com/page/book/java/category/auraqr更多文章欢迎访问 https://www.zhoutao123.com一些没有经常使用多线程开发的开发者而言,下面的代码可能有点不太容易读懂,主要还是因为不太熟悉这种编程模型,相信各位读者仔细分析代码后,结合代码中注释慢慢分析,如果有不同的地方,欢迎留言。坚持下来,你就会看到不一样的结果!本文章的重点不在于数据库的使用以及数据库连接的创建,本文着重于使用等待-超..原创 2020-07-12 18:10:41 · 435 阅读 · 0 评论 -
多线程的应用-异步任务线程池的简单实现
原文链接 https://www.zhoutao123.com/page/book/java/category/ggccu5更多文章欢迎访问 https://www.zhoutao123.com对于服务端的应用而言,经常会出现比如定时任务,或者任务的异步执行,熟悉Java开发的开发者,经常会使用Executors类,其提供了4种不同的线程池: newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingle..原创 2020-07-12 18:09:32 · 158 阅读 · 0 评论 -
线程之间的通讯机制详解
原文链接 https://www.zhoutao123.com/page/book/java/category/rdz3p6更多文章欢迎访问 https://www.zhoutao123.com各个线程之间相互的独立工作,每个线程都有自己的操作栈以及变量等信息。就像一个团队一样,如果每个人都只做自己的工作,缺少团队成员之间的相互交流,我想这种模式的工作,其价值也是很低的。对于对多线程而言,情况也是类似的,他们同属于某个进程,它们之间应该相互通讯,相互协同,已达到更好的效率实现更复杂的业务..原创 2020-07-12 18:08:09 · 281 阅读 · 0 评论 -
【并发编程】线程的启动与终止使用示例
原文链接 https://www.zhoutao123.com/page/book/java/category/xc8ki9更多文章欢迎访问 https://www.zhoutao123.com1、线程的创建在文章 线程的创建 & 线程优先级 文章中,我们已经了解了线程的创建过程,在运行线程之前,首先需要构建一个线程对象,线程对象需要一些线程的属性: 所属线程组,线程优先级,以及是否是守护线程等等。在创建线程对象完成之后,调用start() 方法就可以启动这个线程。其语句为: ..原创 2020-07-12 18:06:01 · 286 阅读 · 0 评论 -
线程状态以及守护线程
原文链接 https://www.zhoutao123.com/page/book/java/category/ru8i46更多文章欢迎访问 https://www.zhoutao123.com1、线程状态说明Java 的线程在运行阶段会有不同的状态,在Java代码中表现为一个枚举类 Thread.State 其定义如下:public enum State { // 尚未启动的线程状态,一般是创建好的线程尚未调用start() 方法局处于NEW状态 NEW, /..原创 2020-07-12 18:03:49 · 228 阅读 · 0 评论 -
【并发编程】线程创建 & 线程优先级
原文链接 https://www.zhoutao123.com/page/book/java/category/qpg9q1更多文章欢迎访问 https://www.zhoutao123.comJava天然支持多线程,在 java.lang 包实现了一些对多线程支持的类,Thread 以及 Runnable接口,Thread继承了Runnable接口。1、创建线程可以通过继承Thread或者继承Runable来实现多线程,使用start() 方法来启动线程,比如下面的代码// ..原创 2020-07-12 18:02:16 · 259 阅读 · 0 评论 -
【并发编程】进程 与 线程对比说明
原文链接 https://www.zhoutao123.com/page/book/java/category/zu0gw2更多文章欢迎访问 https://www.zhoutao123.comJava 从诞生起就明智的支持多线程。线程作为操作系统的调度的最小单元,多个线程合理的并发执行能够明显的提高程序性能。但是不当的使用多程序或者过多的创建线程也会是程序性能降低。所以学习如何使用多线程是每个开发者都必须要面对的过程。什么是进程?进程是操作系统的基础,是一次的程序执行,是一个程序及..原创 2020-07-12 18:00:45 · 97 阅读 · 0 评论 -
HashMap 底层源码分析与原理
原文链接 https://www.zhoutao123.com/page/book/java/category/qgh3pq更多文章欢迎访问 https://www.zhoutao123.com为了方便,这里暂未讲述JDK1.8的红黑树结构,请参考红黑树的操作算法相关的章节HashMap是一个非常重要的数据结构,日常开发工作中,我们经常使用到HashMap,常见的操作就是:put & get . 其底层是数组和链表组成。 添加元素的过程中,当两个对象出现Hash冲突之后..原创 2020-07-12 17:58:42 · 145 阅读 · 0 评论 -
ArrayList 底层源码分析
原文链接 https://www.zhoutao123.com/page/book/java/category/irpont更多文章欢迎访问 https://www.zhoutao123.comArrayList 是我们在日常开发中经常使用的一个类,其位于 java.util 包下,底层使用了数组来实现,在继承关系上如下所示 父类是Collect,说明其是对象的容器 继承了 RandomAccess 表明可以随机访问 继承Serializable标识可以被序列化 继承Clon..原创 2020-07-12 17:56:34 · 156 阅读 · 0 评论 -
LinkedList 底层源码分析
原文链接 https://www.zhoutao123.com/page/book/java/category/sdoma8更多文章欢迎访问 https://www.zhoutao123.comLinkedList在JDK中也占据比较重要的角色,其底层由双向链表实现,其实笔者分析LinkedList源码一路下来并没有发现复杂的地方,更多的是对双向链表的理解和其操作方法,比如链表的添加和移除等等,读者如果在这里感觉理解的很吃力,可以先去熟悉下双向链接然后早理解LinkedList可能效果更好..原创 2020-07-12 17:53:41 · 147 阅读 · 0 评论 -
HashSet 底层源码分析
原文链接 HashSet 底层源码分析更多文章欢迎访问 我的独立博客站点HashSet 是Jdk提供一种对象容器,元素不可重复的数据结构,经常被用于去重或者着重声明集合为不重复的集合的作用,其类图如下所示。和 ArrayList 相比,HashSet多了两个构造方法 HashSet(int,float) & HashSet(int,float,boolean) 这里来着重分析下这五个构造方法,查看其是如何实现构造的。HashSet 的构造方法 public Hash..原创 2020-07-12 17:50:17 · 203 阅读 · 0 评论 -
类加载器的命名空间以及类的卸载
类加载器的命名空间每个类加载器又有一个命名空间,由其以及其父加载器组成类加载器的命名空间的作用和影响每个类加载器又有一个命名空间,由其以及其父加载器组成在每个类加载器自己的命名空间中不能出现相同类名的类 (此处值得是类的全名,包含包名)在不同的类命名空间中,可能会出现多个相同的类名的类如下面的代码示例中, 首先定义一个类加载器 MyClassLoader sta...原创 2020-03-01 12:09:00 · 775 阅读 · 0 评论 -
【深入理解Java虚拟机 】类的加载器
1. 类加载器的分类JVM 自带的类加载器根类加载器( BootStrap )拓展类加载器 ( Extension )系统 (应用) 加载器 ( System / AppClassLoader)开发者自己创建的类加载器java.long.ClassLoader 的子类 public abstract class ClassLoader { ...原创 2020-03-01 11:55:45 · 748 阅读 · 0 评论 -
【深入理解Java虚拟机】类的初始化过程
类的初始化过程类的加载过程.png加载 将 Class 文件以二进制的形式加载到内存中验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的默认值,比如int初始化为0,reference初始化为null) 但是达到类的初始化之前都没有初始化为真正的值。零值.png解析...原创 2020-03-01 11:43:06 · 773 阅读 · 0 评论 -
Ehcache缓存配置和基本使用
个人博客原文链接 更多文章欢迎访问个人博客站点在java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0 license)、充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中。 够快 Ehcache的发...原创 2018-09-09 10:21:01 · 2549 阅读 · 1 评论 -
局域网内扫描设备的简单Java实现
个人博客原文链接 更多文章欢迎访问个人博客站点 在产品的使用中我们一般都要设置一个配置环节,这个环节可以设定主机的IP地址等信息,但是这样配置的话使得我们的产品用起来效果不是很好,因此我想到了实现局域网IP扫描的功能,IP局域网扫描是指定IP网段获取IP地址信息的方法,在加上PING命令来处理实现,检查该设备是否在线。 代码很简单,主要浏览就是获取主机名,然后检查该设备是否可用,如...原创 2018-09-09 10:23:01 · 5486 阅读 · 0 评论 -
NumberFormatException异常为什么不需要捕获?
个人博客原文链接 更多文章欢迎访问个人博客站点 在写数字字符串转数字的过程(Integer a = Integer.parseInt("123");)发现此静态方法抛出了NumberFormatException异常,但实际代码中并没有要求try/catch处理或者继续向上抛出异常,很是诧异,因此查询了资料,现在记录如下。 异常源码信息此方法的源码为: public...原创 2018-09-09 10:26:28 · 3745 阅读 · 2 评论 -
SpringBoot集成redis缓存设置
个人博客原文链接 更多文章欢迎访问个人博客站点 Remote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(v...原创 2018-09-09 10:32:16 · 4382 阅读 · 0 评论 -
Spring 应用中配置线程池
更多文章欢迎访问个人博客站【 燕归来】 在spring-task.xml核心配置文件中配置,并在Spring的总入口出导入此配置文件,这里只是为了管理方便,当然也可以直接在入口处直接配置。<import resource="spring-task.xml"/> 在Spring-task.xml文件中装载线程池相关对象内容<bean id="taskE...原创 2018-09-09 10:05:07 · 3475 阅读 · 0 评论