自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring @Scheduled线程模型探究 - 改为多线程

通过上一节分析源码我们知道,执行任务的是TaskScheduler的实现类,在ScheduledAnnotationBeanPostProcessor#finishRegistration()方法中会设置TaskScheduler。首先如果注册器ScheduledTaskRegistrar中的scheduler成员为空才会从Spring上下文中加载我们只需要为ScheduledTaskReg...

2020-03-14 20:19:48 436 1

原创 Netty -从ServerBootstrap入手分析内部实现

public class DiscardServer { private int port; public DiscardServer(int port) { this.port = port; } public void run() throws Exception{ EventLoopGroup bossGroup = new...

2020-03-09 00:41:03 181

原创 Spring @Scheduled线程模型探究 - 源码追踪

接上一篇我们来分析一下 @Scheduled 这个定时器的注解实现首先我看下@Scheduled注解的定义package org.springframework.scheduling.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java....

2020-02-22 19:04:36 285

原创 Spring @Scheduled线程模型探究 - 发现问题

最近工程中发现一个奇怪的问题,简单代码逻辑如下所示:@EnableScheduling@Componentpublic class SimpleImplement { private static final Logger LOG = LoggerFactory.getLogger(SimpleImplement.class); private volatile List&...

2020-02-22 14:52:45 212

转载 Spring扩展接口InstantiationAwareBeanPostProcessor解析

添加链接描述

2019-12-03 23:34:44 156

转载 Maven3种打包方式之一maven-assembly-plugin的使用

在Maven中,主要有3个插件可以用来打包:maven-jar-plugin,默认的打包插件,用来打普通的project JAR包;maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包;maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等。我们日常使用的以maven-assembly-plugin为最多,因为大数据项目...

2019-12-03 16:45:07 330

原创 Linux 安装 FireFox 浏览器

该文档为FireFox在Linux系统上的安装说明文档,适用于CentOS6.4安装依赖准备安装包 atk-2.4.0.tar.xz cairo-1.12.2.tar.xz gdk-pixbuf-2.26.3.tar.xz glib-2.32.4.tar.xz gtk+-3.4.4.tar.xz pango-1.30.1.tar.xz pixman-0.26.2.tar.x...

2018-05-18 15:27:06 4468

原创 控制三个线程交替打印ABC

package me.zyc.thread.test;import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject;import java.util.concurrent.locks.ReentrantLock;public class LoopRunByOrder { private s

2018-01-10 17:38:59 421

转载 Java对象内存布局

在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头 HotSpot虚拟机的对象头包括两部分信息:第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的

2017-11-13 21:30:50 202

原创 JDK源码走读之ReentrantLock

ReentrantLock的功能几乎等同于Synchronized,在分析源码之前,我们首先来明确一下ReentrantLock要实现的功能,这样才能做到有的放矢。控制线程执行顺序。当线程获取锁进入Synchronized代码块(获取监视器),其余线程必须等待该线程执行完毕,才能继续执行该代码块。提供线程通信功能。Synchronized关键字支持在其代码块中使用await、notify、

2017-11-11 17:30:26 352

转载 如何聪明地使用锁

竞争锁是造成多线程应用程序性能瓶颈的主要原因 区分竞争锁和非竞争锁对性能的影响非常重要。如果一个锁自始至终只被一个线程使用,那么 JVM 有能力优化它带来的绝大部分损耗。如果一个锁被多个线程使用过,但是在任意时刻,都只有一个线程尝试获取锁,那么它的开销要大一些。我们将以上两种锁称为非竞争锁。而对性能影响最严重的情况出现在多个线程同时尝试获取锁时。这种情况是 JVM 无法优化的,而且通常会发生从用户

2017-11-10 16:07:12 1498

原创 JDK源码走读之深入理解线程池(ThreadPoolExecutor)

Java线程池提供了一个框架来统一管理线程,通过把提交任务和执行任务解耦,使开发者无需关心线程的运行状态,只要把任务提交给线程池既可。使用线程池有以下好处: 1. 减少在创建和销毁线程上所花的时间以及系统资源的开销 2. 避免创建过多的线程导致系统资源过度消耗、系统执行效率低下线程池可以通过工厂类Executors创建,大致分为以下几种: 1. newFixedThreadPool(int

2017-10-28 18:28:58 300

原创 深入源码剖析Thread.join实现

java.lang.Thread类提供一个静态方法join可以阻塞主线程(调用join方法的线程),直到当前线程执行完。用法如下: join会保证t2在t1线程执行完退出之后再执行,程序执行结果总是如下 定义实现该方法掉用了join(0)方法, 我们跟进查看具体实现。注意这里是一个静态方法加了同步锁,锁的是this,也就是当前类实例。我们知道在线程获取了锁以后再执行wait方法,会让线程释放掉锁

2017-10-27 23:21:44 524 2

原创 JDK源码走读之LinkedList

LinkedList本质是一个双端链表,双端链表区别于双向链表,双向链表之链表的首位相连,而双端链表则分别持有链表头尾两个节点,访问时既可以从头开始,也可以从尾部开始。链表结构 定义LinkedList实现了List、Dequet接口使它兼具二者的特性,既支持集合的添加删除操作,又支持队列的出队入队操作public class LinkedList<E> extends AbstractSeque

2017-10-24 17:00:10 183

原创 JDK源码走读之ArrayList

ArrayList其实就是动态数据,它封装了初始化、添加、删除、遍历等操作,并加入了泛型支持,下面我们从几个方面来分析一下ArrayList的实现。定义public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

2017-10-23 17:18:58 195

原创 如何优雅的停止服务(ShutdownHook)

JDK提供了Runtime.addShutdownHook(Thread hook)方法用来注册一个钩子(线程),在Java程序退出时会调用这个钩子来清理现场。这个钩子会在以下场景中被调用: 1. 程序正常退出 2. 使用System.exit() 3. 终端使用Ctrl+C触发的中断 4. 系统关闭 5. OutOfMemory宕机 6. 使用Kill pid命令干掉进程(

2017-10-16 15:24:09 3278

原创 死锁分析

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁需要满足4个条件: 1. 互斥条件:一个资源每次只能被一个进程使用。 2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 4. 循环等待条件:若干进程之间形成一种头尾相接

2017-09-28 14:28:13 331

原创 elasticsearch基本参数配置

1、 JVM参数配置配置合理的jvm参数,能够避免OOM(OutOfMemory),提高系统响应时间(减小GC停顿)。1.1、 heap-size-Xms32G -Xms32G官方建议设置heap大小为操作系统的一半且最大不超过32G。1)Lucene的设计目的是把底层OS里的数据缓存到内存中。Lucene的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同

2017-08-07 15:25:25 453

原创 elasticsearch(5.2.0)安装文档

1、 集群安装以三个节点集群安装为例,使用elasticsearch-5.2.0进行安装。1.1、 硬件要求系统要求:CentOS 6.x/CentOS7.xLinux内核要求:Linux2.6+(不开启system call filters)Linux3.5+(开启system call filters)其他要求:系统文件打开数最少为63356vm.max_m

2017-08-07 11:42:45 406

转载 elasticsearch内存分配设置详解

Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了。如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题。 这里有两种方式修改Elasticsearch的堆内存(下面就说内存好了),最简单的一个方法就是指定ES_HEAP_SIZE环境变量。服务进程在启动时候会读取这个变量,并相应的设置堆的大小。设置命令如下:export ES

2017-08-07 10:15:34 1272

转载 GC日志分析

首先,给出一个日志输出的例子:参数设置为:-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M参数解释:-XX:+PrintGCDetails 启用日志-XX:-UseAdaptiveSizePolicy 禁用

2017-06-30 15:15:36 226

原创 记一次OOM(GC overhead limit exceeded)异常

java.lang.OutOfMemoryError异常并不一定意味着内存溢出

2017-06-28 16:59:27 1255

转载 java 线程的几种状态

java 线程的几种状态java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明:NEW 状态是指线程刚创建, 尚未启动RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等BLOCKED  这

2017-06-08 11:30:08 349

原创 spark executor

Spark core设置Core是指CPU计算核心,这个在spark集群中很重要,为集群配置更多的Core能意味集群运算能力更强,但这也不是绝对的。下面主要来看两个参数: spark.cores.max 这个参数是指运行一个application最大分配的core个数,设置这个参数,spark会尽可能的申请足够多的core来运行application。 Spark.

2017-06-06 18:06:11 5751

转载 RDD:基于内存的集群计算容错抽象

该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing。下面的翻译,我是基于科学网翻译基础上进行优化、修改、补充,这篇译文翻译得很不错。在此基础上,我增加了来自英文原文的图和表格数据,以及译文中缺少的未翻译的部分。如果翻

2017-03-29 14:07:29 401

转载 讲个故事:一个SparkSQL作业的一生

Spark是时下很火的计算框架,由UC Berkeley AMP Lab研发,并由原班人马创建的Databricks负责商业化相关事务。而SparkSQL则是Spark之上搭建的SQL解决方案,主打交互查询场景。人人都说Spark/SparkSQL快,各种Benchmark满天飞,但是到底Spark/SparkSQL快么,或者快在哪里,似乎很少有人说得清。因为Spark是基于内

2017-03-28 17:28:06 524

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除