自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(179)
  • 收藏
  • 关注

原创 JVM(2)再探类加载过程

文章目录一、前言(概述)二、类加载的时机2.1类加载的过程概述(总体流程)2.2加载与初始化的时机(什么时候开始加载和初始化?)三、类加载过程3.1加载(Loading)3.2验证3.2.1文件格式验证3.2.2元数据验证3.2.3字节码验证3.2.4符号引用验证3.3准备3.4解析3.5初始化四、类加载器4.1类与类加载器4.2双亲委派机制4.2.1三种类加载器4.2.2类加载器双亲委派模型4.2.3破坏双亲委派模型《深入理解Java虚拟机》第七章–虚拟机类加载机制,总结与理解。一、前言(概述).

2020-11-25 14:48:07 2

原创 JUC(18)ThreadLocal的应用与原理

文章目录一、ThreadLocal是什么二、ThreadLocal怎么用三、ThreadLocal源码分析3.1 set()方法3.1.1 ThreadLocalMap、getMap()3.2 get()方法3.2.1 setInitialValue()方法3.3 remove()方法四、ThreadLocalMap与内存泄漏4.1防止内存泄露五、总结在保证线程安全时,我们可以对共享资源加锁来控制线程对资源的访问。这是第一种方式:加锁。除此之外,我们还可以通过增加资源来保证所有对象的线程安全,这就是第

2020-11-24 08:39:53 3

原创 JUC(17)java中有哪些原子操作

文章目录一、什么是原子操作二、Java中原子操作的实现方式2.1使用锁实现原子操作2.2使用CAS实现原子操作2.2.1 CAS实现原子操作的问题三、CPU如何实现原子操作3.1对于单核CPU3.2对于多核CPU一、什么是原子操作原子操作:一个或多个操作在CPU执行过程中不被中断的特性当我们说原子操作时,需要分清楚针对的是CPU指令级别还是高级语言级别。比如:经典的银行转账场景,是语言级别的原子操作;而当我们说volatile修饰的变量的复合操作,其原子性不能被保证(这里指的是CPU指令级

2020-11-24 08:39:16 15

原创 JUC(16)线程安全2:当我们说线程安全时,到底在说什么

文章目录前言一、多线程编程中的三个核心概念1.1原子性1.2可见性1.3顺序性(有序性)二、JMM2.1什么是JMM2.2内存划分2.3内存交互操作三、Volatile3.1 验证 保证可见性3.2 验证 不保证原子性3.3 验证 禁止指令重排(有序性)3.4小结四、Java如何解决多线程并发问题4.1Java如何保证原子性4.1.1锁和同步4.1.2CAS(compare and swap)4.2Java如何保证可见性4.3Java如何保证顺序性4.3.1happens-before原则(先行发生原则)五

2020-11-24 08:38:47 9

原创 JUC(15)线程安全1:如何保证线程安全

文章目录一、什么是线程安全二、线程安全状态(等级)2.1不可变2.2绝对线程安全2.3相对线程安全2.4线程兼容2.5线程对立三、线程安全的实现方法3.1互斥同步(阻塞同步)(悲观并发)3.2非阻塞同步 (乐观并发)3.3无同步方案3.3.1可重入代码(ReentrantCode)3.3.2栈封闭3.3.3线程本地存储(Thread Local Storage)一、什么是线程安全百科中是这样解释的:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全

2020-11-24 08:38:32 11

原创 JUC(14)让线程顺序执行的方法

文章目录一、可用的几种方法二、实现2.1 join()方法2.2 wait()方法2.3 线程池方法newSingleThreadExecutor()2.4 使用线程的Condition(条件变量)方法2.5 使用线程的CountDownLatch(倒计数)方法2.6 使用线程的CyclicBarrier(回环栅栏)方法三、总结一、可用的几种方法join()方法,让其他线程加入当前线程中。wait()方法,让当前线程进入等待状态使用线程的线程池方法:newSingleThreadExecutor(

2020-11-24 08:38:18 7

原创 JUC(12)各种锁

文章目录一、公平锁与非公平锁二、可重入锁三、自旋锁四、死锁一、公平锁与非公平锁公平锁:非常公平;不能插队的,必须先来后到;非公平锁:非常不公平,允许插队的,可以改变顺序。(ReentrantLock 与 Synchronized 默认都是非公平锁)/** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */public R

2020-11-24 08:37:51 7

原创 JUC(11)四大函数式接口和Stream流式计算

文章目录一、四大函数式接口(必需掌握)1.1 Function一、四大函数式接口(必需掌握)可参考 https://blog.csdn.net/wang_luwei/article/details/107600028 https://blog.csdn.net/wang_luwei/article/details/107600001新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算函数式接口:只有一个方法的接口,例如 @FunctionalInter

2020-11-24 08:36:58 7

原创 JUC(10)线程池

JUC(10)线程池此部分可以参考https://blog.csdn.net/wang_luwei/article/details/107490047线程池:三大方法、7大参数、4种拒绝策略池化技术程序的运行,本质:占用系统的资源!我们需要去优化资源的使用 ===> 池化技术线程池、JDBC的连接池、内存池、对象池 等等。。。。资源的创建、销毁十分消耗资源池化技术:事先准备好一些资源,如果有人要用,就来我这里拿,用完之后还给我,以此来提高效率。线程池的好处:1、降低

2020-11-23 15:14:08 7

原创 JUC(9)原子类与CAS

文章目录一、CAS1.1java层面的CAS1.2unsafe类1.3小结二、原子引用类解决ABA问题2.1ABA问题2.2原子引用类解决ABA问题一、CAS1.1java层面的CASCAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.atomic.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲

2020-11-23 15:12:05 28

原创 JUC(8)JMM和Volatile

文章目录一、JMM1.1什么是JMM1.2内存划分1.3内存交互操作二、Volatile2.1 验证 保证可见性2.2 验证 不保证原子性2.3 验证 禁止指令重排(有序性)2.4小结一、JMMJMM (java memory model) 即为JAVA 内存模型 ,不存在的东西,是一个概念,也是一个约定!关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存;2、线程加锁前,必须读取主存中的最新值到工作内存中;3、加锁和解锁是同一把锁;1.1什么是JMMJMM即

2020-11-23 15:10:13 6

原创 JUC(7)同步控制(辅助类)

文章目录一、 CountDownLatch(倒计时器)二、CyclicBarrier(循环栅栏)三、 Semaphore(信号量)四、读写锁ReadWritelock(读写锁)一、 CountDownLatch(倒计时器)其实就是一个减法计数器,对于计数器归零之后再进行后面的操作,这是一个计数器!package com.wlw.add;import java.util.concurrent.CountDownLatch;//减法计数器//有必须要在一些任务完成之后才能执行的任务(注意顺

2020-11-23 15:07:33 32

原创 JUC(6)Callable与Runnable的区别、Future

文章目录一、Runnable二、Callable(简单)三、FutureTask(很有用)四、Callable 接口和 Runnable接口的区别五、异步回调 Future5.1没有返回值的 runAsync() 异步回调5.2有返回值的supplyAsync() 异步回调5.3与Callable在线程池中的使用一、RunnableRunnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现多线程,Thre

2020-11-23 15:02:42 18

原创 JUC(5)线程安全与不安全的集合

文章目录一、List中的不安全 (ArrayList 是不安全的)二、 set 中的不安全三、 map中的不安全四、阻塞队列(BlockingQueue接口)4.1SynchronousQueue同步队列此部分可查看 https://blog.csdn.net/wang_luwei/article/details/107490131一、List中的不安全 (ArrayList 是不安全的)可对比参考:https://www.cnblogs.com/zz-ksw/p/12774371.htmlpack

2020-11-23 15:00:56 5

原创 JUC(4)八锁现象(关于锁的8个问题)

文章目录一、问题1与问题2二、 问题3与问题4三、 问题5与问题6四、问题7与问题8五、小结锁是什么,如何判断锁的是谁?8锁,就是关于锁的8个问题一、问题1与问题2问题一:标准情况下,下面的AB两个线程哪个先执行? 发消息? or 打电话?问题一答:总是先执行 发消息send() 再执行打电话call()。(为什么? 如果你认为是顺序在前? 这个答案是错误的!)问题二:让send() 方法休眠4s,此时AB两个线程哪个先执行?问题二答:还是先执行 发消息send() 再执行打电话

2020-11-23 14:58:51 6

原创 JUC(3)生产者与消费者问题(线程通信)

文章目录一、传统版本,用Synchronized实现的1.1存在的问题(虚假唤醒),线程不只两个时二、juc版(lock锁)的生产者与消费者问题三、Condition 条件 有什么用呢?线程之间的通信问题:生产者与消费者问题一、传统版本,用Synchronized实现的package com.wlw.producerandconsumer;/** * 线程之间的通信问题:生产者与消费者问题 * 两个线程交替执行,操作同一变量,一开始为0,A B 一个执行+1 另一个执行-1 */pu

2020-11-23 14:56:52 4

原创 JUC(2)Lock锁与Synchronized(重点)

文章目录一、传统的Synchronized (关键字)二、lock锁 (lock是一个接口)2.1 ReentrantLock 可重入锁中的公平锁与非公平锁2.2与Synchronized不同的加锁方式的买票案例(Lock锁)三、Synchronized 和 Lock区别一、传统的Synchronized (关键字)一个买票案例package com.wlw.demo01;/** * 真正的多线程开发 * 线程就是一个单独的资源类,没有任何的附属操作! (只有属性和方法) */publi

2020-11-23 14:54:36 6

原创 JUC(1)JUC概述与线程基础知识

文章目录1.什么是JUC2.进程和线程3.并发与并行4.线程的状态(六个)5.wait/sleep的区别1.什么是JUC在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。2.进程和线程进程是正在运行的程序,是系统进行资源分配的基本单位 (一个程序:例如QQ.exe,Music.exe)线程,又称轻量级进程(Light Weight Process)。

2020-11-23 14:52:42 3

原创 JUC(13)高并发之AQS

文章目录一、概述1.1背景介绍二、需求2.1 功能2.2 性能目标三、AQS框架介绍3.1共享资源状态(state)3.2两种资源共享方式四、源码分析4.1结点状态waitStatus4.2 acquire(int)4.2.1 tryAcquire(int)4.2.2 addWaiter(Node)4.2.2.1 enq(Node)4.2.3 acquireQueued(Node, int)4.2.3.1 shouldParkAfterFailedAcquire(Node, Node)4.2.3.2 par

2020-11-12 22:15:34 53

原创 代理模式

代理模式静态代理静态代理角色分析抽象角色 : 一般使用接口或者抽象类来实现(会被真是角色和代理角色所继承)真实角色 : 被代理的角色代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .客户 : 使用代理角色来进行一些操作 .代码实现Rent . java 即抽象角色package com.wlw.proxy;// 抽象角色:租房, 房东与代理都要实现这个接口去完成租房功能public interface Rent { void

2020-11-09 15:23:03 38

原创 桥接模式(bridge)

桥接模式(bridge)桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或者接口(Interface)模式分析:这个场景中有两个变化地维度:品牌和类型。案例代码:package com.wlw.bridge;//第一个维度 品牌public interface Brand { //品牌信息 void info();}package com.wlw.bridge;//具体的

2020-11-09 15:12:57 102

原创 适配器模式

适配器模式将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作!角色分析目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口。(电脑USB接口)需要适配的类:需要适配的类或适配者类。(网线)适配器:通过包装一个需要适配的对象,把原接口转换成目标对象!(转换器)案例案例:电脑插网线接口为USB接口,与网线接口不一致,所以需要一个USB网线转换器,使电脑可以上网。package com.wl

2020-11-09 15:08:14 49

原创 结构型模式

结构型模式结构型模式分为以下几种模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式结构型模式的作用:从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题...

2020-11-09 15:03:52 5

原创 原型模式

原型模式原型模式使用的方式就是克隆,这就要注意浅克隆和深克隆。浅克隆:v1(原型对象),v2(v2是由v1克隆出来的)里面的数据是指向的同一块内存地址,要修改的话,v1,v2都会被改动深克隆:通过v1克隆v2时,把里面的数据也克隆了一份,并分配了内存空间。原型模式之浅克隆package com.wlw.prototype.qianCopydemo01;import java.util.Date;/*原型模式的实现,就是依靠克隆,先创建出一个对象v1,通过v1 克隆出

2020-11-08 22:23:58 10

原创 建造者模式

文章目录建造者模式的常规用法建造者模式的第二种方式建造者模式总结建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。主要作用:在用户 不知道对象的建造过程和细节的情况下 就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)例子:工厂(建造者模式) :负责制造汽车(组装过>程和细节在工厂内)汽车购买者(用户) :你只需

2020-11-08 22:22:56 5

原创 工厂模式

工厂模式工厂模式的作用:实现了创建者和调用者的分离核心本质:实例化对象不使用new,用工厂方法代替将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦详细分类:简单(静态)工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码)工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。满足OOP七大原则中的三个:开闭原则: 一个软件的实体应当对扩展开

2020-11-08 22:18:31 25

原创 单例模式

单例模式单例模式最重要一点,构造方法私有单例模式要解决的就是系统开销的问题常见场景:Windows的任务管理器Windows的回收站项目中,读取配置文件的类,一般也只有一个对象, 没必要每次都去new对象读取网站的计数器一般也会采用单例模式,可以保证同步数据库连接池的设计一般也是单例模式在Servlet编程中,每个Servlet也是单例的在Spring中,每个Bean默认就是单例的(单例是饿汉式创建)1. 饿汉式package com.wlw.single;/** *

2020-11-08 22:12:39 10

原创 23种设计模式

设计模式什么是设计模式设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路(一种思维)。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。设计模式的意义设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。正确使用设计模式具有以下优点:可以提高程序员的思维能力、编程能力和设计能力。使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高

2020-11-08 22:08:49 11

原创 HashMap与ConcurrentHashMap详解

1.HashMap(基于jdk1.8)1.1、HashMap(基于jdk1.8)的存储结构jdk1.8中,HashMap的存储结构为:数组(哈希表)+链表+红黑树(jdk1.7中HashMap的存储结构为数组(哈希表)+链表)jdk1.8中HashMap的结构图:1.2、HashMap(基于jdk1.8)的源码分析public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cl

2020-10-26 10:09:15 89 1

原创 146 SpringBoot

SpringBootSpringBoot 是用来简化Spring的,本质上和Spring是一致的, 核心点是自动装配一、SpringBoot简介1.1回顾什么是SpringSpring是一个开源框架(就是一个容器,工厂),2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。1.2Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量

2020-10-25 22:16:29 289 1

原创 1 JUC(高并发)

文章目录1.什么是JUC2.进程和线程3.并发与并行4.线程的状态(六个)5.wait/sleep的区别6.Lock锁与Synchronized(重点)6.1传统的Synchronized (关键字)6.2lock锁 (lock是一个接口)6.2.1 ReentrantLock 可重入锁中的公平锁与非公平锁6.2.2 与6.1不同的加锁方式的买票案例6.3Synchronized 和 Lock区别7.生产者与消费者问题(线程通信)7.1传统版本,用Synchronized实现的7.1.1存在的问题(虚假唤醒

2020-10-06 14:27:58 335 2

原创 JVM(1)JVM简单总结

文章目录1.JVM的位置1.1 JDK 、JRE 、JVM 的关系1.1.1 JDK1.1.2 JRE1.1.3JVM1.2JDK、JRE、JVM三者的联系与区别2.JVM 的体系结构3.类加载器3.1 new关键字 与 实例化过程3.2类加载器4.双亲委派机制4.1委派机制的流程图4.2双亲委派机制的作用5.沙箱安全机制【了解】5.1组成沙箱的基本组件6.native关键字6.1Native Interface本地接口7.程序计数器8.方法区9.栈10.三种JVM11.堆12.新生区、老年区、永久区12.

2020-09-30 21:02:15 182

原创 124 Servlet_7 _Servlet特性

124 Servlet_7 _Servlet特性1.线程安全问题Servlet在访问之后,会执行实例化操作,创建一个Servlet对象。而我们Tomcat容器可以同时多个线程并发访问同一个Servlet,如果在方法中对成员变量做修改操作,就会有线程安全的问题。2.如何保证线程安全synchronized将存在线程安全问题的代码放到同步代码块中实现 SingleThreadModel 接口servlet实现SingleThreadModel接口后,每个线程都会创建servle

2020-09-29 13:30:17 22

原创 123 Servlet_6 _Servlet生命周期

123 Servlet_6 _Servlet生命周期一、生命周期四个阶段1.1实例化当用户第一次访问Servlet时,由容器调用Servlet的构造器创建具体的Servlet对象。也可以在容器启动之后立刻创建实例。< load-on-startup>1</ load-on-startup>(如果是0或正整数,就是一启动tomcat就创建了,如果是负数或者不写,就是请求访问时才创建)注意:只执行一次1.2初始化在初始化阶段,init()方法会被调用。这

2020-09-29 13:29:06 29

原创 145 前端Vue

文章目录一、概述二、前端知识体系2.1前端三要素2.2结构层(HTML)2.3表现层(CSS)什么是CSS预处理器2.4、行为层(JavaScript)Native原生JS开发TypeScript微软的标准JavaScript框架UI框架JavaScript构建工具2.5、三端统一混合开发(Hybrid App)微信小程序2.6、后端技术2.7、主流前端框架iViewElementUIICEVantUIAtUI三、了解前后分离的演变史3.1、后端为主的MVC时代优点缺点3.2、基于AJAX带来的SPA时代优

2020-09-21 15:26:12 173 1

原创 144 SSM与SSH

文章目录一、SSM说明二、实践:三、项目目录SSM与SSHMyBatis与Hibernate的优劣SH和SSM对比异同点、各自优势SSH和SSM定义共同点:不同点:SSH和SSM的实现原理Struts2 的实现原理SpringMVC 的实现原理:总结一、SSM说明ssm(Spring、SpringMVC、mybatis)整合:配置文件的整合:SpringMVC的配置文件(mvc.xml)单独一个、Spring的配置文件(applicationContext.xml)与mybatis的配置文件(my

2020-09-21 15:20:36 27

原创 143 LayUI

143 LayUI一、引言1.1介绍官网: https://www.layui.com/在官网首页,可以很方便的下载ayUILayUl是一款经典模块化前端UI框架,我们只需要定义简单的HTML、CSS、JS即可实现很复杂的前端效果。使得前端页面的制作变得更加简单。二、环境搭建2.1下载在官网即可完成下载2.2导入依赖下载的LayUI解压后,将其中的layui目录导入项目中三、页面元素3.1布局响应式栅格布局,每行分12等分<%@ page

2020-09-11 20:42:18 25

原创 142 Quartz

文章目录一、引言1.1简介二、Quartz使用2.1导入依赖2.2定义job2.3API测试2.4配置2.5核心类说明三、Trgger3.1 SimpleTrigger3.2 CronTrigger [重点]3.2.1 Cron表达式组成3.2.2 Cron表达式符号3.2.3 Cron表达式示例四、Spring整合Quartz 【重点】4.1依赖4.2定义job4.3配置4.4操作4.4.1启动任务4.4.2任务操作4.4.2.1删除任务4.4.2.2暂停、恢复4.4.2.5批量操作一、引言1.1简介

2020-09-11 20:40:35 25

原创 141 Log-日志管理体系

141 Log-日志管理体系一、引言1.1日志介绍用于记录系统中发生的各种事件。记录的位置常见的有:控制台、磁盘文件等1.2日志级别日志级别从低到高:TRACE、DEBUG、 INFO、 WARN、ERROR、FATAL1.3日志作用通过日志观察、分析项目的运行情况(项目维护)通过日志分析用户的使用情况(大数据分析)…二、解决方案12.1 Log4j+Commons-Logging2.1.1导入依赖项目中添加Log4j和Commons-Logging的依赖<

2020-09-11 20:39:14 25

原创 140 SpringMVC

文章目录一、SpringMVC1.1引言1.2 MVC架构1.2.1概念1.2.2好处二、开发流程2.1导入依赖2.2配置核心(前端)控制器2.3后端控制器2.4配置文件(mvc.xml)2.5访问2.6过程分析三、接收请求参数3.1基本类型参数3.2实体收参【重点】3.3数组收参3.4集合收参【了解】3.5路径参数3.6中文乱码四、跳转4.1转发4.2重定向4.3跳转细节五、传值5.1 Request和Session5.2 JSP中取值5.3 Model5.4 ModelAndView5.5 @Sessi

2020-09-11 20:38:12 96

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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