自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 《深入理解Java虚拟机》第七章–虚拟机类加载机制-总结

文章目录一、前言(概述)二、类加载的时机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 329

原创 人手一支笔: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 261 1

原创 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 577

原创 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 163

原创 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 458 1

原创 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 431

原创 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 159

原创 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 237 1

原创 JUC(10)线程池

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

2020-11-23 15:14:08 135

原创 无锁: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 232

原创 JUC(8)Java内存模型-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 251

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

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

2020-11-23 15:07:33 176

原创 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 335 1

原创 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 292

原创 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 1732

原创 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 207

原创 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 170

原创 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 284

原创 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 292

原创 代理模式(静态代理、动态代理)

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

2020-11-09 15:23:03 386

原创 设计模式之桥接模式(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 804

原创 设计模式之适配器模式

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

2020-11-09 15:08:14 168

原创 结构型模式

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

2020-11-09 15:03:52 179

原创 设计模式之原型模式

原型模式原型模式使用的方式就是克隆,这就要注意浅克隆和深克隆。浅克隆: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 183

原创 设计模式之建造者模式

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

2020-11-08 22:22:56 157

原创 设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)

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

2020-11-08 22:18:31 2007

原创 设计模式之单例模式

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

2020-11-08 22:12:39 215 1

原创 23种设计模式

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

2020-11-08 22:08:49 176

my-shop-master.zip

一个 javaweb未用框架前的综合项目(小米商城-可用于大作业) 1、没有使用框架 2、做了沙箱支付-支付宝 3、有前台展示系统 和 后台管理系统(功能相对来说是比较完善)

2022-01-18

空空如也

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

TA关注的人

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