
java
文章平均质量分 59
我叫晓美焰
这个作者很懒,什么都没留下…
展开
-
spring代码类继承层次结构深度解析之BeanFactory
上面是我截图自IDEA,主要是DefaultListableBeanFactory的继承结构。为啥选DefaultListableBeanFactory呢?熟悉spring源码的人一般都知道,这个类已经是BeanFactory组件的最底层的实现了。虽然他下面还有个XmlBeanFactory,但是已经是过时的了。所以我们最底层选择的是他,就能看到整个BeanFactory的功能的扩展体系。还请注意,ApplicationContext不在本次的讨论之内。这个图大致可分为3部分吧。红色框的部分;Ser..原创 2021-02-20 15:15:03 · 1274 阅读 · 4 评论 -
spring中的代码编写技巧大全第一期
1.多个重载方法,底层实现是某个doXXX的方法.如下图所示,红框中3个方法均实现自BeanFactory中的getBean方法,是重载了3个getBean。具体实现则调用了自己的doGetBean方法。因为:虽然是3个重载的getBean方法,参数不一样,但是作用都是获取Bean。所以他们内部的逻辑几乎是一样的,所以抽取到doGetBean中。而不同的参数差异,例如requiredType , rags typeCheckOnly则体现在doGetBean中的一些if分支中。...原创 2021-02-20 14:34:48 · 214 阅读 · 0 评论 -
java并发编程小案例(五)
public class Test5 { public synchronized void f1(){ System.out.println(Thread.currentThread().getName() + " f1 start"); try { Thread.sleep(10000); } catch (Int...原创 2019-03-29 21:15:31 · 168 阅读 · 0 评论 -
java并发编程小案例(六)
public class Test6 { private double account; private String name; public synchronized void set(double account , String name){ this.name = name; try { Thread.sl...原创 2019-03-29 21:37:08 · 147 阅读 · 0 评论 -
java并发编程小案例(七)
```public class Test7 { synchronized void f1(){ System.out.println("f1 start "); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { ...原创 2019-04-08 21:09:13 · 151 阅读 · 0 评论 -
java并发编程小案例(八)
```public class Test8 { synchronized void f(){ System.out.println("f start "); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { ...原创 2019-04-08 21:13:07 · 211 阅读 · 0 评论 -
java并发编程小案例(九)
```public class Test9 { int count = 0; synchronized void f(){ System.out.println(Thread.currentThread().getName() + " start"); while(true){ count ++ ; ...原创 2019-04-08 21:23:28 · 172 阅读 · 0 评论 -
java并发编程小案例(十)
```public class Test10 { boolean running = true; void f(){ System.out.println("f start "); while(running){ } System.out.println("f end"); } public ...原创 2019-04-08 21:58:59 · 1099 阅读 · 0 评论 -
java并发编程小案例(十一)
public class Test11 { volatile int count = 0; void f(){ for(int i = 0 ; i < 10000 ; i ++ ){ count ++ ; } } public static void main(String[] args) { ...原创 2019-04-18 21:56:17 · 263 阅读 · 0 评论 -
java中的CAS
本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中的Atomic系统使用CAS原理实现的并发类。无锁的概念在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小...转载 2019-05-05 17:09:30 · 415 阅读 · 0 评论 -
java并发编程小案例(四)
public class Test4 implements Runnable { private int count = 10; @Override public /*synchronized*/ void run() { count -- ; System.out.println(Thread.currentThread().getNa...原创 2019-03-29 21:06:11 · 176 阅读 · 0 评论 -
java并发编程小案例(三)
public class Test1 { private static int count = 10; public synchronized static void f(){ count--; System.out.println(count); }}如果是静态方法的话,锁定的是当前的class对象:T.class对象。等同于如下写...原创 2019-03-29 20:43:47 · 166 阅读 · 0 评论 -
java并发编程小案例(二)
public class Test1 { private int count = 10; public void f(){ synchronized (this){ count--; System.out.println(count); } }}简单的写法,直接将Test1的对象作为锁对...原创 2019-03-29 20:31:47 · 199 阅读 · 0 评论 -
java类加载机制
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使转载 2018-02-05 18:43:46 · 160 阅读 · 0 评论 -
Atomic包的使用
简介Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。 <br style="margin-top:0px">在Atomic包里一共有12转载 2018-01-29 17:37:49 · 394 阅读 · 0 评论 -
Atomic包
简介Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。 在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原转载 2018-01-29 17:40:41 · 199 阅读 · 0 评论 -
Java 基于红黑树的TreeMap,TreeSet实现原理
TreeSet and TreeMap总体介绍之所以把TreeSet和TreeMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说TreeSet里面有一个TreeMap(适配器模式)**。因此本文将重点分析TreeMap。Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大转载 2018-02-06 16:22:57 · 1203 阅读 · 1 评论 -
spring context源码解析之@Async
背景大家项目中用到异步、多线程的场景很多,使用最多的场景还是主动对象模式,就是主线程开启一个线程池去任务分发,任务执行完成之后,关闭线程池,但是有的场景则需要部分代码异步执行的效果,简单的说就是有一个可以复用的线程池可以复用,直接new Thread当然也可以,不推荐,没有线程池的可靠性好,如果这个时候再创建一个线程池用完再关闭代码是不是有点重,维护性也不好,@Async这个注解就是为了解决这个问...转载 2018-05-28 11:58:32 · 1364 阅读 · 0 评论 -
微服务小知识
01—什么是微服务 微服务的概念源于Martin Fowler所写的一篇文章“Microservices”。 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行...转载 2018-11-23 14:55:52 · 258 阅读 · 1 评论 -
SpringBoot 启动流程
写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。总览: ...转载 2018-12-06 15:53:54 · 218 阅读 · 0 评论 -
java并发编程小案例(一)
public class Test1 { private int count = 10; private Object o = new Object(); public void f(){ synchronized (o){ count--; System.out.println(count); ...原创 2019-03-29 20:29:31 · 347 阅读 · 0 评论 -
java线程的状态
线程的状态新建 MyThreadInfo 类,打印线程对象属性,代码如下:public class MyThreadInfo extends Thread { @Override // 可以省略 public void run() { System.out.println("MyThreadInfo 的线程实例正在执行任务");//原创 2018-02-01 15:46:22 · 246 阅读 · 0 评论