自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sid小杰的博客

转载注明出处

  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 【一】SpringBoot源码分析之启动主流程----SpringApplication初始化方法initialize

一、简介我会分成几篇来讲,这一篇只是SpringApplication的创建。debug调式SpringBoot 1.5.8的源码,运行在内置的tomcat上。Spring Boot 通过扫描classpath下的实例决定装载哪个web容器。我这里pom.xml文件用的spring-boot-starter-web所以,会启动tomcat来作为servlet的容器。 ...

2019-01-29 12:29:53 632

原创 【十四】Java设计模式GOF23之迭代器模式

简介迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。它提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。迭代器模式的结构1.抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接...

2019-01-17 17:35:00 236

原创 【十三】Java设计模式GOF23之命令模式(例子ThreadPoolExecutor类)

一、简介命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。JDK的java.util.concurrent包的ThreadPoolExecutor类就用到命令模式。二、简易命令模式组成1.Command(抽象命令类): ...

2019-01-17 16:28:03 484

原创 【十二】Java设计模式GOF23之策略模式(ThreadPoolExecutor类的拒绝策略源码)

简介在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。策略模式的角色和职责1.Strategy:策略(算法)抽象2.ConcreteStrategy:各种策略(算法...

2019-01-16 18:53:22 431

原创 【十一】Java设计模式GOF23之责任链模式

简介责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。javax.servlet.Filter就是用的责任链...

2019-01-16 17:55:36 284

原创 【二十二】Java多线程之线程转储和分析(jstack详解、以死锁例子分析jstack dump下来的线程文件)

示例:用ReentrantLock写一个死锁,thread-1获取lockA后,等待lockB,thread-2获取lockB后,等待lockA。测试代码package com.sid;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @pr...

2019-01-16 13:12:49 1088

原创 【二十一】Java多线程J.U.C之AQS框架源码导读(总结、干货)(模板模式template pattern)

一、AQS的模板模式解读AbstractQueuedSynchronizer该类使用的设计模式是模板模式template pattern。在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。在AbstractQueuedSynchroniz...

2019-01-15 16:32:07 433

原创 【二十】Java多线程J.U.C之Fork/Join框架

JDK1.7引入的Fork/Join框架是基于工作窃取算法工作窃取算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。一个大任务分割为若干个互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应。比如线程1负责处理队列A里的任务,线程2负责队列B的。如果线程1...

2019-01-10 16:22:39 272

原创 【十九】Java多线程J.U.C之ReentrantLock和Condition(ReentrantLock与Synchronized的区别)

ReentrantLock和Synchronized比较优点:1.ReentrantLock可以指定是公平锁还是非公平锁,默认是非公平锁。而Synchronized只能是非公平锁,可能存在线程饥饿。ReentrantLock构造器源码: /** * Creates an instance of {@code ReentrantLock}. * Thi...

2019-01-10 15:07:49 228

原创 【十八】Java多线程J.U.C之并发容器(线程安全、CopyOnWriteArrayList、ConcurrentSkipListSet)

一、CopyOnWriteArrayListArrayList对应的线程安全的并发容器是CopyOnWriteArrayListHashSet对应的线程安全的并发容器是CopyOnWriteArraySetCopyOnWriteArraySet与CopyOnWriteArrayList雷同例如private static List<Integer> list = ...

2019-01-09 16:03:02 468

原创 【十七】Java多线程之不可变 变量、集合(final、Collections.unmodifiableXXX、ImmutableXXX、浅拷贝)

一、final关键字可以用来修饰类、方法、变量1.final类不能被继承final类中的所有成员方法都会被隐式的指定为final方法。2.final方法子类不能覆盖该方法,一个类的priavte方法会隐式的被指定为final方法3.final变量final修饰的基本数据类型的变量,它的值在初始化后就不能修改。final修饰的引用类型的变量,它在初始化之后不能再指...

2019-01-09 15:00:57 514

原创 【十六】Java多线程J.U.C之atomic包(原子性、CAS、UnSafe)

一、概述原子性提供了互斥访问,同一时刻只会有一个线程对资源进行操作。该包下提供了具有原子性的数据类型。它是通过CAS来实现原子性的。java.util.concurrent.atomic以AtomicInteger的incrementAndGet()方法为例 /** * Atomically increments by one the current v...

2019-01-08 17:22:18 359

原创 【十五】Java多线程之volatile(可见性、有序性、happens-before、内存屏障和禁止重排序)

一、简介volatile能保证可见性、有序性、但是不能保证原子性。它靠内存屏障和禁止重排序来实现可见性、有序性。二、可见性1.导致共享变量在线程间不可见的原因:线程交叉执行 重排序结合线程交叉执行 共享变量更新后的值没有在线程工作内存和主存之间及时更新2.可见性(synchronize、volatile可以保证可见性)这篇只说volatile,synchronize在其他...

2019-01-08 13:25:41 720

原创 【十四】Java多线程J.U.C之 Phaser

概述Phaser把多个线程协作执行的任务划分为多个阶段,编程时需要明确各个阶段的任务,每个阶段都可以有任意个参与者,线程都可以随时注册并参与到某个阶段Phaser比较适合这样一种场景,一种任务可以分为多个阶段,现希望多个线程去处理该批任务,对于每个阶段,多个线程可以并发进行,但是希望保证只有前面一个阶段的任务完成之后才能开始后面的任务。方法简介arriveAndAwaitA...

2019-01-07 18:08:12 183

原创 【十三】Java多线程J.U.C之 Semaphore

概述信号量Semaphore的作用是控制最大并发数。信号量是一个非负整数,所有通过它的线程都会将该整数减一,当该整数值为零时,所有试图通过它的线程都将处于等待状态。通过 acquire() 获取一个许可(阻塞),如果没有就等待,而 release() 释放一个许可。可以设置该信号量是否采用公平模式,如果以公平方式执行,则线程将会按到达的顺序(FIFO)执行,如果是非公平,则可以后请...

2019-01-07 17:04:06 165

原创 【十二】Java多线程J.U.C之 CyclicBarrier

CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。代码示例...

2019-01-07 16:46:04 218

原创 【十一】Java多线程J.U.C之 Countdownlatch

J.U.C是JDK 1.5提供的包 java.util.concurrentCountdownlatch允许一个或多个线程等待直到在其他线程中一组操作执行完成。Countdownlatch原理主线程TA调用await()后等待T1 T2 T3三个线程都执行了countDown,计数器cnt=0后,主线程开始继续执行。使用场景有任务A和任务B,任务B必须在任务A完成之后再做。...

2019-01-07 16:02:50 178

hadoop-eclipse-plugin-2.9.0套装

其中插件包是hadoop-eclipse-plugin-2.5.1.jar hadoop.ddl和winutils.exe是hadoop2.9.0的,有64位和32位的 亲测hadoop.ddl和winutils.exe可用 这个2.5.1的插件包在hadoop2.9.0中也能能。 2.5.1插件包能不能用主要是看eclipse的版本。 我用的eclipse版本是:Version: Mars.2 Release (4.5.2)

2018-05-11

空空如也

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

TA关注的人

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