自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

茫然背影的博客

学习是一个长期坚持的过程

  • 博客(48)
  • 收藏
  • 关注

原创 private方法可以被代理吗?

目录抽象类不可以被代理 没有接口不可以被代理接口的静态方法能被重写或实现吗?defaultMethod可以被代理吗?privateMethod可以被代理吗?protected 、package下面方法可以被代理吗抽象类不可以被代理 没有接口不可以被代理在 Java 8之前,接口可以有常量变量和抽象方法。我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类。 在 Java 8 接口引入了一些新功能——默认方法和静态方法。..

2021-07-05 11:23:34 2634 2

原创 Spring如何解决循环依赖的

Spring使用三级缓存解决的:三级缓存:SingletonObject:全成品(10):key:beanName value:实例化并初始化完成的对象 EarlySingletonObject:半成品(5):key:beanName value:实例化好的对象(如果需要aop代理,则此时已被Aop代理) SingletonFactory:半半成品(3):key:beanName value:ObjectFactory一个对象进入缓存的顺序:初始都是进入到三级缓存,一旦有人引用它将他提为二

2021-07-04 22:43:21 142

原创 手写阻塞队列V1

public class MyBlockingQueue<E> { public static void main(String[] args) throws Exception { MyBlockingQueue<Integer> blockingQueue = new MyBlockingQueue<Integer>(5); new Thread(new Runnable() { @Override.

2021-07-02 20:43:11 114

原创 ConcurrentLinkedQueue源码分析

并编程中,一般需要用到安全的队列,如果要自己实现安全队列,可以使用2种方式:方式1:加锁,这种实现方式就是我们常说的阻塞队列。方式2:使用循环CAS算法实现,这种方式实现队列称之为非阻塞队列。从点到面, 下面我们来看下非阻塞队列经典实现类:ConcurrentLinkedQueue (JDK1.8版)ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全的队列,按照先进先出原则对元素进行排序。新元素从队列尾部插入,而获取队列元素,则需要从队列头部获取...

2021-05-14 18:55:39 410 1

原创 LinkedBlockingQueue源码分析

目录LinkedBlockingQueue实现总结基本认识put(E e)方法E take()方法remove()方法size()方法LinkedBlockingQueue实现总结LinkedBlockingQueue底层是一个链表(可以指定容量,默认是Integer.MAX_VALUE),维持了两把锁,一把锁用于入队,一把锁用于出队,并且使用一个AtomicInterger类型的变量保证线程安全,AtomicInterger:表示当前队列中含有的元素个数:生产者不断进

2021-05-14 18:19:07 70

原创 ArrayBlockingQueue阻塞队列实现分析

基本认识:生产者去生产和消费者去消费都需要拿到此锁,拿不到就进入lock的AQS队列:ReerantLock lock 消费者去消费的条件队列:Condition notEmpty 生产者继续生产的条件队列:Condition notFull putIndex(每一轮都是从0-array.length,走到array.length后,继续从0开始下一轮):下一个生产者生产的位置 takeIndex(每一轮都是从0-array.length,走到array.length后,继续从0开始下一轮):下

2021-05-14 14:50:36 157

翻译 Lock Condition源码分析

JUC提供了Lock可以方便的进行锁操作,但是有时候我们也需要对线程进行条件性的阻塞和唤醒,这时我们就需要condition条件变量,它就像是在线程上加了多个开关,可以方便的对持有锁的线程进行阻塞和唤醒。Condition的概念Condition主要是为了在J.U.C框架中提供和Java传统的监视器风格的wait,notify和notifyAll方法类似的功能。JDK的官方解释如下:条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通.

2021-05-14 11:32:10 185

原创 ConcurrentHashMap精简篇(无源码)

目录Concurrent HashMap(数组+链表+红黑树)ConcurrentHashMap.transfer()多线程扩容ConcurrentHashMap扩容源码分析总结:ConcurrentHashMap.put()过程总结((hash值)& (数组长度-1)确定位置)ConcurrentHashMap.get()(hash值)& (数组长度-1)确定位置)扩容时可以get】ConcurrentHashMap.size()Jdk1.7Concurrent

2021-05-13 18:21:34 193 3

原创 ThreadPoolExecutor线程池原理

思考:核心线程怎么实现不释放的?临时线程又是怎么实现释放的?核心线程: while(true)逻辑: 从阻塞队列里获取任务take(),获取到就继续执行,获取不到就一直阻塞在take里。临时线程:可以在blockQueue.take(timeOut)带有超时时间的获取,获取不到就退出(达到了释放)基本认识private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));ctl高3位用来标记线程池状态,低29位来标

2021-05-13 17:41:43 140

原创 ConcurrentHashMap源码分析

目录重要的属性sizeCtl重要的内部类初始化方法initTableConcurrentHashMap.transfer()扩容ConcurrentHashMap.put()ConcurrentHashMap.get()ConcurrentHashMap.size()ConcurrentHashMap与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchronized锁,这样的锁无疑会.

2021-05-12 21:02:05 208 3

原创 Vmvare workstation下载安装及配置

下载步骤https://www.vmware.com/cn/p

2021-04-30 14:40:32 93

原创 Linux下安装Mysql 8.0

目录Mysql安装包官网下载教程安装步骤:下载载后上传至linux服务器,比如目录:/mysql配置my.cnf并初始化数据库配置Centos Linux启动和停止脚本并启动修改Root用户密码设置root用户可以远程登录(默认不允许)防火墙放行3306端口使用root进行远程连接Mysql安装包官网下载教程http://www.fgedu.net/2429.htmls安装步骤:下载载后上传至linux服务器,比如目录:/mysql配置...

2021-04-29 22:57:28 127

转载 Unsafe大致了解

https://www.cnblogs.com/mickole/articles/3757278.htmlJava中Unsafe类详解java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:1、通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应。2、可以定位对象某字

2020-08-13 21:17:51 117

原创 ReadWriteLock原理

ReentrantReadWriteLock重入读写锁:实现了ReadWriteLock接口,ReadWriteLock.readLock()需要返回读锁,ReadWriteLock.writeLock()需要返回写锁内部类:Sync(又分为FailSync和NonFairSync) ,ReadLock(里面又有一个Sync类变量), WriteLock(里面又有一个Sync类...

2020-08-08 17:59:47 470

原创 ReentrantLock加锁(lock())、释放锁(unlock())的实现

目录1、lock()过程总结2、 unLock()过程总结3、lock()源码分析1、抢占锁源码TryAquire():分析2、队列形成及阻塞源码分析1、形成队列过程2、形成队列阻塞的过程4、unLock()源码分析1、lock()过程总结lock()关键代码:public final void acquire(int arg) { ...

2020-04-08 20:30:14 1221

转载 ReentrantLock加锁(lock())、释放锁(unlock())的实现

ReentrantLock加锁(lock())、释放锁(unlock())的实现丑星星关注0.0512017.05.03 15:59:31字数 4,627阅读 3,641一、简介ReentrantLock是JUC包下比较重要同样也是比较常用的一个类,从类名可以看出它的功能:Lock是锁,reentrant可重入,可重入锁。在功能上ReentrantLock和synchroniz...

2020-04-08 11:47:09 1385

转载 Java的LockSupport的park和unpark的基本使用,以及对线程中断的响应性

park和unpark基本介绍LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isA...

2020-04-01 21:58:19 532

原创 线程安全性问题

线程安全的源头问题1.可见性cpu增加了高速缓存,均衡与内存的速度差异,这使得多个线程拿到共享资源后,分别在不同的cpu上执行,每个cpu都拥有自己的高速缓存,每个线程在不同的高速缓存里,互相之间并不可见,如:俩个线程同时拿到i=0,第一个线程在自己的缓存里写i=1,第二个线程并不知道2.原子性初始i=0 i++实际上分3步操作,1.获取值2.加一3.写回内存这使得第一个线程...

2020-02-14 19:10:49 250

java命令

在一个目录建立一个HelloWorld.javapublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}在该目录下打开命令窗口(地址栏清空然后输入cmd即可打开)//添加Packagepacka...

2020-02-14 12:15:14 83

原创 线程基本操作

1.Thread joint1.join作用就是等t1运行完,主线程才会继续往下执行public class MyThread1 extends Thread { @Override public void run() { try { TimeUnit.MICROSECONDS.sleep(1000); Sy...

2020-02-13 15:49:43 113

原创 Idea生成java文档及查看字节码文件

目录idea生成java文档idea反编译查看类的字节码文件idea生成java文档idea反编译查看类的字节码文件配置好以后,使用

2020-01-12 12:17:47 962

原创 ArrayList源码分析

目录ArrayList底层是采用数组ArrayList构造函数ArrayList add分析ArrayList Get分析ArrayList Remove分析LinkedList底层是链表LinkedList构造函数LinkedList add分析LinkedList Remove分析LinkedList Get分析ArrayList底层是采用数组...

2020-01-11 18:26:03 101

原创 HashTable源码分析

目录HashTableHashTable构造函数HashTablePut分析HashTable扩容分析HashTableGet分析HashTable Remove分析HashTable初始容量是11,加载因子是0.75,是线程安全的HashMap,底层采用数组加链表(没有红黑树),每个方法都加了synchronized保证线程安全HashTable构造...

2020-01-11 15:45:49 181

原创 HashSet和TreeSet源码分析

目录HashSet底层HashSet构造函数HaseSet add分析TreeSet底层TreeSet构造函数TreeSet add分析HashSet底层 是一个HashMap,只不过HashMap里面每个key对应的value值都是一样的PRESENT private static final Object PRESENT = ne...

2020-01-11 13:27:58 155

原创 TreeMap源码分析

目录TreeMap底层采用红黑树存储TreeMap构造函数TreeMap Put分析TreeMap Get分析TreeMap Remove分析TreeMap底层采用红黑树存储TreeMap构造函数public TreeMap() { comparator = null;//只是把比较器置为null,并未开辟空间}TreeMap Put分析初...

2020-01-11 12:57:39 274

原创 JDK1.8 HashMap源码分析

目录HashMap底层结构基本介绍构造函数HashMap Put过程分析HashMap扩容分析HashMap Get分析HashMap Remove分析HashMap底层结构基本介绍HashMap采用数组加链表(链表节点个数到达8个,链表将会转化为红黑树,红黑树节点个数少于6个,红黑树将会变成链表),默认加载因子是0.75,即元素个数达到数组总长度的0.75...

2020-01-09 00:25:38 125 1

原创 三种创建线程的方法

目录实现Runnable接口继承Thread通过FuturerTask和Callable实现Runnable接口 public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new Runnable() {//...

2019-12-01 17:13:10 231

原创 日期类型参数接收和响应处理

目录前台直接向controller传Date类型参数前台向controller传JavaBean,JavaBean里面有Date类型参数JSP格式化Date类型参数前台直接向controller传Date类型参数 //不加DateTimeFormat注解,不可以接收 @RequestMapping("/welcome") public Date save(@...

2019-08-25 19:26:16 682

原创 springmvc参数接收

目录基本参数绑定一次保存俩个对象,并且对象之间有相同的属性名(InitBinder可以自定义绑定规则)此controller都返回json,返回json需要添加一个jackson的jar包,对象转json使用<dependency> <groupId>com.fasterxml.jackson.core</groupId> &l...

2019-08-25 17:09:55 117

原创 ModelAttribute和RedirectAttribute用法

目录ModelAttribute用法一:标注在方法上二:标注在方法的参数上重定向传参RedirectAttributes一 : 拼接到url上二 : 放入session中ModelAttribute用法一:标注在方法上controller中的每个方法访问时都会首先执行标有ModelAttribute注解的方法,并把方法返回值放入request域中...

2019-08-24 22:39:00 1583

原创 处理器(controller)的响应处理

@Controllerpublic class HelloController { //最原始的响应 @RequestMapping("/getOriginalResponse") public void getOriginalResponse(HttpServletRequest request, HttpServletResponse response) throw...

2019-08-20 23:59:53 408

原创 request域中放入参数几种方法

目录ModelModelMapModelAttributerequest.setAttribute(最原始的)modelAndVIew.addObjectModel //返回界面 @RequestMapping("/getUiModel") public String getUiModel(Model model) { mode...

2019-08-20 23:55:49 3956

原创 webapp下静态资源的访问

静态资源访问前言:web.xml<mvc:resources mapping="/**" location="classpath:/views/"/><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http...

2019-08-18 19:07:29 5532

原创 WEB-INF下资源文件的访问

目录WEB-INF下文件相关SpringMVC.xmlweb.xmlController启动服务器直接访问(404)启动服务器通过controller访问(成功)WEB-INF下文件相关WEB-INF下资源文件的安全性较高,它是不能直接通过浏览器直接访问的。访问它的方式只有一种,那就是通过服务器来访问。只能通过控制层来访问。而对于WEB-INF下的文件为了书写方...

2019-08-18 15:20:11 3183

原创 SpringMVC的第一个程序

目录SpringMvc基本流程图webapp下新建welcome.jspsrc.main.java下新建HelloController在resource下新SpringMVC.xml在webapp的WEB-INF下新建web.xml配置服务器启动服务器访问http://localhost:8080/helloSpringMvc基本流程图...

2019-08-15 00:14:06 89

原创 Spring 事务

目录没有事务的转账场景Spring基于XML的事务Spring 基于注解的事务Spring事务传播行为require没有事务的转账场景resources下db.properties spring_config.xmldb.properties#我用的是mysql的8.0.16版本,对于8系列版本有2项注意事项# 1.jdbcUrl后面这个serverTimezo...

2019-06-30 13:48:38 62

原创 Spring JdbcTemplate

目录spring集成datasourceSpring JdbcTemplatespring集成datasource在resources目录下创建db.properties, spring-config.xmldb.properties#我用的是mysql的8.0.16版本,对于8系列版本有2项注意事项# 1.jdbcUrl后面这个serverTimezone=UTC必须...

2019-06-30 11:32:11 74

原创 Mock框架 Mockito

mock的定义mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为比较流行的Mock 如下(本文介绍Mockito):JMockEasyMockMockitopowermockmock使用场景Mockito测试package mockito;/*@description<br/>@author...

2019-06-30 10:56:51 614

原创 Spring Aop

目录Aop简介Xml方式实现Aop增强拓展注解方式实现AopAop简介Aop面向切面的编程,就是把很多功能重复的代码抽象出来形成切面类代码,再有运行时向业务方法中动态植入切面类代码。关注点:重复的代码切面:关注点形成的类叫切面类切入点:植入切面类代码的地方,通过切入点表达式,指定拦截哪些类的哪些方法,在这里植入切面类代码。在介绍spring...

2019-06-23 23:21:54 86

原创 Cglib代理

目录Cglib代理Cglib代理适用场景注意事项Cglib代理子类代理,在内存中构建一个子类对象从而实现对目标对象的扩展。Cglib代理适用场景有一个目标对象,但是没有接口import org.springframework.cglib.proxy.Enhancer;//代理工厂提供获取代理的方法public class CglibProxyFactory ...

2019-06-23 12:47:18 207

空空如也

空空如也

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

TA关注的人

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