
Java
文章平均质量分 85
Java
lznnnnnnn
这个作者很懒,什么都没留下…
展开
-
线程异常处理
文章目录一、线程池异常处理流程二、源码执行流程2.1 execute 执行流程2.2 submit 执行流程三、线程异常捕获方法3.1 在 Runnable#run 方法中捕获代码异常3.2 在 Callable#call 方法中捕获异常3.3 重写 ThreadPoolExecutor#afterExecute3.4 为工作者线程设置 UncaughtExceptionHandler一、线程池异常处理流程1.1 当执行方式是 execute 时,可以看到堆栈异常的输出原因:ThreadPoolExe原创 2021-05-06 22:25:04 · 1678 阅读 · 0 评论 -
Java 队列
一、ArrayBlockingQueue基于 ReentrantLock 的有界阻塞队列,支持公平锁ArrayBlockingQueue 维护了一把全局锁,无论是出队还是入队,都共用这把锁,这就导致任一时间点只有一个线程能够执行。那么对于 “生产者-消费者” 模式来说,意味着生产者和消费者不能并发执行,可能出现性能瓶颈二、DelayQueueDelayQueue 是一个无界阻塞队列,用于放置实现了 Delayed 接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对原创 2021-05-06 22:21:28 · 289 阅读 · 0 评论 -
多线程参数设置
一、默认值corePoolSize=1eueCapacity=Integer.MAX_VALUEmaxPoolSize=Integer.MAX_VALUEepAliveTime=60sallowCoreThreadTimeout=falsejectedExecutionHandler=AbortPolicy()二、核心参数设置为了说明合理设置的条件,我们首先确定有以下几个相关参数:tasks,程序每秒需要处理的最大任务数量(假设系统每秒任务数为 100~1000)tasktime,原创 2021-05-06 22:19:01 · 2979 阅读 · 0 评论 -
Java 开发手册笔记
Java 开发手册笔记基于嵩山版文章目录Java 开发手册笔记一、OOP 规约二、并发处理三、前后端规约四、日期时间五、异常日志六、单元测试七、MySQL 数据库一、OOP 规约1.1【强制】如上所示 BigDecimal 的等值比较应使用 compareTo() 方法,而不是 equals() 方法。说明:equals() 方法会比较值和精度 (1.0 与 1.00 返回结果为 false) ,而 compareTo() 则会忽略精度二、并发处理2.1【强制】SimpleDateForma原创 2021-01-14 16:18:27 · 334 阅读 · 0 评论 -
Java 线程状态及转换关系
文章目录一、Java 线程状态1 NEW(新建)2 RUNNABLE(可运行)3 BLOCKED(阻塞)4 WAITING(无限期等待)5 TIMED_WAITING(限期等待)6 TERMINATED(结束)二、Java 线程状态转换图三、VisualVM 线程监控线程状态与 Java 线程状态对应关系1 运行2 休眠3 等待4 驻留5 监视参考文章一、Java 线程状态1 NEW(新建)java.lang.Thread.State枚举中的NEW状态描述:/** * Thread state f原创 2020-09-14 23:44:45 · 454 阅读 · 0 评论 -
Java虚拟机学习 - 类加载机制
类加载机制JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、转载 2017-02-15 21:23:59 · 295 阅读 · 0 评论 -
浅析jvm与jmm模型结构与关系
最近翻看了java线程相关的东西,书中有一边专门讲到java内存模型,读完之后边回想起java虚拟机模型,那时心中便在思考java内存模型(以下简称jmm)和java虚拟机模型(以下简称jvm)之间的关系,下面将详细讲述。一 jvm结构jvm的内部结构如下图所示,这张图很清楚形象的描绘了整个JVM的内部结构,以及各个部分之间的交互和作用。1 Class Loader(类加载器)原创 2017-05-13 14:09:36 · 8442 阅读 · 3 评论 -
java序列化算法揭秘
序列化是将对象保存为字节序列的过程,反序列化是将字节序列转换为对象的过程。Java Serialization API为开发者提供了一套标准机制来处理对象序列化。本文你将看到如何序列化一个对象以及为什么对象的序列化在有的情况下是必须的。你将会学习到java的序列化算法以及一个揭示序列化对象格式的例子。阅读完本篇内容后,你讲会对java的序列化算法如何工作以及一个实体对象在底层如何被序列化有一个深入翻译 2017-02-14 12:34:06 · 1209 阅读 · 0 评论 -
双重检查机制被破解的声明
在单线程下获取单例的都代码如下所示:// Single threaded versionclass Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) helper = new Helper(); return helper;原创 2017-02-17 15:57:00 · 801 阅读 · 0 评论 -
ConcurrentHashMap源码解析(JDK 1.8)
一 成员变量解析 /* * Encodings for Node hash fields. See above for explanation. */ // 扩容节点的hash值 static final int MOVED = -1; // hash for forwarding nodes // 树节点的hash值原创 2017-03-15 19:06:46 · 759 阅读 · 0 评论 -
java基础之volatile关键字
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解转载 2017-02-16 18:44:03 · 378 阅读 · 0 评论 -
ArrayList详解
前言这个分类中,将会写写Java中的集合。集合是Java中非常重要而且基础的内容,因为任何数据必不可少的就是该数据是如何存储的,集合的作用就是以一定的方式组织、存储数据。这里写的集合,一部分是比较常见的、一部分是不常用但是我个人平时见到过的,一些比较相似的集合(比如HashMap和Hashtable)就只讲一个,突出它们之间的区别即可。最后,要指出一点,对于集合,我认为关注的点主要有四点:转载 2017-06-23 13:36:35 · 399 阅读 · 0 评论 -
深入解析String#intern
引言在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的String转载 2017-07-05 16:23:58 · 435 阅读 · 0 评论 -
Java虚拟机学习 - 体系结构 内存模型
一:Java技术体系模块图二:JVM内存区域模型1.方法区也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。运行时常量池:是方法区的一部分,Cla转载 2016-11-04 19:58:03 · 420 阅读 · 0 评论 -
Java虚拟机学习 - 对象内存分配与回收
对象优先在Eden上分配大多数情况下,对象优先在新生代Eden区域中分配。当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC)。Minor GC期间虚拟机将Eden区域的对象移动到其中一块Survivor区域。大对象直接进入老年代所谓大对象是指需要大量连续空间的对象。虚拟机提供了一个XX:PretenureSizeThre转载 2017-02-15 21:21:55 · 329 阅读 · 0 评论 -
理解HashMap
一、基本介绍HashMap是一种基于哈希表(hash table)实现的map,哈希表(也叫关联数组)一种通用的数据结构,大多数的现代语言都原生支持,其概念也比较简单:key经过hash函数作用后得到一个槽(buckets或slots)的索引(index),槽中保存着我们想要获取的值,如下图所示:二、哈希函数设计原理在哈希表容量(也就是buckets或slots大小)为le原创 2016-09-12 23:18:15 · 400 阅读 · 0 评论 -
JAVA阻塞队列之ArrayBlockingQueue
一、ArrayBlockingQueue简介一个建立在数组之上被BlockingQueue绑定的阻塞队列。这个队列元素顺序是先进先出。队列的头部是在队列中待的时间最长的元素。队列的尾部是再队列中待的时间最短的元素。新的元素会被插入到队列尾部,并且队列从队列头部获取元素。这是一个典型的绑定缓冲,在这个缓冲区中,有一个固定大小的数组持有生产者插入的数据,并且消费者会提取这些数据。一旦这个类原创 2016-09-08 14:15:46 · 827 阅读 · 0 评论 -
阿里云web服务环境搭建
最近申请了阿里云服务器打算构造一个web环境供以后自己写的app使用,我装载的是Ubuntu14.04系统,以前也玩过Ubuntu,但是好久没搞这些,许多命令都忘记了,所以写这篇博客,把我搭建web服务的整个流程记录下来,方便下次查阅。一、安装JDK1 下载JDK下载这步,直接百度,没啥说的2 将下载好的JDK放入/usr/lib/jvm中,用解压命令进行解压sudo tar原创 2016-10-01 13:07:43 · 1510 阅读 · 0 评论 -
Java虚拟机学习 - 垃圾收集算法
跟踪收集器跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Roots 没有任何引用链时,则证明此对象是不可用的。下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象。转载 2016-11-04 20:15:53 · 420 阅读 · 0 评论 -
java 软引用和弱引用
软引用(SoftReference)软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。软引用可以和一个引用队列(ReferenceQueue)联合使用,原创 2016-10-27 15:25:46 · 569 阅读 · 0 评论 -
java基础之static关键字作用
static关键字主要有两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类而不是对象关联在一起具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类(1)static成员变量:Java类提供了两种类型的变量:用static关键字修饰的静态变量和不用static关键字修饰的实例变量原创 2017-02-10 12:42:45 · 401 阅读 · 0 评论 -
java基础之final关键字作用
Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?final在Java中是一个保留的关键字,可以声明成转载 2017-02-10 15:12:19 · 500 阅读 · 0 评论 -
String类不可变性的好与坏
在这之前我们先看一下可变类和不可变类的定义:可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容。 不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容。不可变类的实例一但创建,其内在成员变量的值就不能被修改。String类不可变性的好处1 只有当字符串是不可变的,字符串池才有可能实现。字符串常量池(String pool, String int原创 2017-02-10 15:44:59 · 536 阅读 · 0 评论 -
java基础之transient关键字
transient的用途Q:transient关键字能实现什么?A:当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。例如,当反序列化对象——数据流(例如,文件)可能不存在时,原因是你的对象中存在类型为java.io.InputStream的变量,转载 2017-02-13 12:25:48 · 348 阅读 · 0 评论 -
java基础之foreach
foreach实现原理集合和数组可以用foreach进行元素访问是因为实现了java.lang.Iterable接口。jdk api文档中是这样描述Iterable接口的:实现这个接口允许对象成为 "foreach" 语句的目标。不过咋一看Iterable接口并没啥特别之处,只是定义了一个迭代器而已。public interface Iterable { /**原创 2017-02-15 19:04:48 · 645 阅读 · 0 评论 -
完美的单例模式
一、立即加载模式(饿汉模式)/** * 立即加载模式(饿汉模式) * * @author LZN * */public class SingleOne { private static SingleOne singleOne = new SingleOne(); private SingleOne() { // TODO Auto-generated constr原创 2016-09-08 22:56:57 · 968 阅读 · 1 评论