- 博客(33)
- 收藏
- 关注
原创 java多线程学习
一.实现多线程二.开启多线程启动三.线程停止、中断四.图解线程生命周期五.Thread和Object类中的重要方法详解六. 线程属性七.线程异常处理八.线程使用的利弊并发编程底层原理活跃性问题:死锁、活锁、饥饿...
2021-04-09 20:53:13 153
原创 活跃性问题:死锁、活锁、饥饿
什么是死锁1.发生在并发中2.互不相让:当两个(或更多)线程相互持有对方需要的资源,又不主动释放,导致所有线程都无法继续进行,使得两个(或多个)线程陷入无限的阻塞,这就是死锁两个线程造成的死锁public class DeadLock { public static void main(String[] args) throws InterruptedException { new Thread(DeadLock::command).start(); new
2021-04-08 17:30:24 284 1
原创 并发编程底层原理
1.什么是底层原理?从java代码->CPU指令步骤1.编写Java代码,是*.java文件2.通过javac编译后,根据*.java文件生成对应的*.class文件,这个文件里面是字节码.3.JVM根据平台的不同,根据需求将字节码解释为不同的机械指令到不同的CPU上执行.4.机器指令可以直接在CPU上执行,也就是最终的的程序执行结果根据第3点可知,JVM会将相同的字节码,根据平台支持和规范的不同翻译为不同的机器指令,所以如果单单如此,无法保证并发安全的效果一致.解决通过定义一套规
2021-04-08 16:28:31 272
原创 八.线程使用的利弊
线程安全什么是线程安全不用考虑这些线程在运行时环境下的调度和交替执行(不用考虑多个线程执行顺序和交替执行的影响)也不需要额外的同步(允许多个线程同时操作某块代码)或者在调用方进行任何其他的协调操作(调用方不用为结果的获取添加额外的协调代码,(例如通过join等待某些线程的执行完成才获取结果)获取的时机并不影响结果)不管业务遇到怎样的多个线程调用某个方法或者读写某个对象的情况,在编写这个业务逻辑时,不需要做额外的处理,程序也不会因为多线程出错,就可以称之为线程安全.线程不安全get的时候同时s
2021-04-08 16:19:34 315
原创 七.线程异常处理
UncaughtException主线程可以轻松发现异常,子线程不行由于子线程无法像主线程那样在未捕获异常出现时,终止卡主,轻松排查.同时作为一个兜底的功能,避免不必要的信息提交到前端 public static void main(String[] args) throws InterruptedException { new Thread(()->{ System.out.println(1/0); }).start();
2021-04-08 16:12:55 330
原创 六. 线程属性
六. 线程属性线程各属性纵览ID每次程序运行唯一、自增、不可被修改代码 public static void main(String[] args) throws IOException { Thread main = Thread.currentThread(); System.out.println(main.getName() + ">>" + Thread.currentThread().getId()); new Thr
2021-04-08 16:11:57 105
原创 五.Thread和Object类中的重要方法详解
1.方法概览2.wait,notify,notifyAll作用、用法注意wait的使用一定要在一个循环中进行,根据条件判断是否继续执行伪唤醒/*A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup. While this will rarely occur in practice, applications must guard again
2021-04-08 16:00:10 284 1
原创 四.图解线程生命周期
四.图解线程生命周期线程的一生,六个状态(生命周期)public enum State { //新建 NEW, //可运行 RUNNABLE, //阻塞 BLOCKED, //等待 WAITING, //计时等待 TIMED_WAITING, //终止 TERMINATED; }每个状态的含义New已创建,但是还未启动的新线程.也就是已经new出来了,但是还没有调
2021-04-08 15:50:06 417
原创 三.线程停止、中断
三线程停止、中断之最佳实践1.停止线程的正确方法(原理)通常线程会在什么情况下停止正常运行的线程只有在两种状况下会停止1.run方法的代码全部执行完毕,正确结束的情况2.出现异常,并且方法没有捕获,这时线程也会停止线程停止之后,它所占有的资源比如说内存等,都会和其他不可达的对象一样被jvm回收通过interrupt来通知,而不是强制停止注意只是通知,如果被通知线程执行的代码没有对这个通知进行处理,没有在被捕获的异常中做相应的退出操作,那么是不会真正退出的,而是直接执行到run方法代码结束为止
2021-04-08 15:47:09 901
原创 二.开启多线程启动
二.开启多线程启动的世界1.启动线程的正确和错误方式 public static void main(String[] args) { Runnable run = () -> System.out.println(Thread.currentThread().getName()); run.run(); sout(); Thread thread = new Thread(run); thread.start(
2021-04-08 15:35:09 190
原创 一.实现多线程
一.实现多线程的正确姿势1.1实现多线程的方法到底是一种两种还是四种?https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.htmlThere are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread class PrimeThread extends Thread {
2021-04-08 15:33:28 152
原创 错误的双重检查锁
文章目录错误的双重检查锁正确的双重检查锁已经过时的双重检查锁参考文献错误的双重检查锁 public static Test4 test4 = null; public static void main(String[] args) { if (test4 != null) { synchronized (Thread.class) { if (test4 != null) { t
2020-12-31 20:36:26 289
原创 @Bean和@Component
@Bean和@Component都是用于创建一个bean实例.区别于@Component只能定义bean名称,且只能用于类上//只能用于类上@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Indexedpublic @interface Component { /** * The value may indicate a suggestion for a logical component
2020-12-26 00:24:38 3429 1
原创 Spring Aop 切面通知(Advice)的初始化和执行流程
文章目录配置类通知的初始化执行顺序涉及类和顺序频繁调用方法一个切面各个切点执行顺序结果配置类@Component@Aspectpublic class LogComponent { @Pointcut("execution(* com.test.UserService.*(..))") public void plc() { } @Before("plc()") public void before(JoinPoint jp) { Strin
2020-12-10 20:55:40 1066 1
原创 通过win+r打开的cmd 字体特别小而且老提示 ‘点的大小应介于5和72之间‘处理
修改属性也不行,修改默认值也不行,而且没有字体和字体大小选项这时候可以先尝试通过chcp 936 切换为简体中文的编码再进行默认值和属性修改,这时候就会生效了主要是中文编码环境通过chcp 65001(UTF8)切换为UTF-8出现的异常...
2020-12-09 18:38:56 1242
原创 第 05 章 Spring Boot 整合持久层技术
文章目录前言JDBCSpringBoot整合jdbcJDBC多数据源MybatisSpringBoot整合MybatisMybatis多数据源JPASpringBoot整合JpaJpa多数据源总结前言当前版本mysql8.0.15父pom <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001
2020-12-09 18:35:09 164
原创 第 04 章 Spring Boot 整合 Web 开发
文章目录JSON处理前言自动转配的json处理默认的json处理(Jackson)剩下的存在自动配置的json处理源头(@EnableAutoConfiguration)手动配置的fastjson案例源头(DelegatingWebMvcConfiguration)静态资源访问默认的访问策略自定义静态资源访问代码配置properties配置总结文件上传参数定义自定义配置代码配置properties配置属性来源单文件表单上传单文件ajax上传多文件表单上传多文件ajax上传大文件上传(兼容乱序和顺序)乱序上传
2020-12-07 21:54:32 548
原创 装饰器模式和观察者模式
文章目录装饰器模式装饰者模式的应用场景装饰者模式在源码中的应用装饰者模式的优缺点观察者模式观察者模式的应用场景观察者模式在源码中的应用总结装饰器模式装饰者模式的应用场景装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰者在代码程序中适用于以下场景:1、用于扩展一个类的功能或给一个类添加附加职责。2、动态的给一个对象添加功能,这些功能可以再动态的撤销。例如登录功能定义操
2020-11-28 20:51:13 347
原创 策略模式和适配器模式的区别
文章目录策略模式适配器模式总结策略模式对于策略模式来说,在调用者看来每个策略都是已知的策略,对于会返回怎样的结果,有着一个预期例如调用Arrays.sort(T[], java.util.Comparator<? super T>) public static void main(String[] args) { List<Integer> lists = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
2020-11-28 14:49:22 4497 3
原创 模板模式和适配器模式
文章目录模板模式(Template)简介模板模式(Template)简介模板模式又叫模板方法模式,是指定一个算法的骨架,并允许子类为一个或多个步骤提供实现,模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤,属于行为性设计模式.模板方法适用于以下应用场景:1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2.各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。例如jdbc的使用,一次jdbc的调用一般需要经历如下流程public void
2020-11-28 01:00:44 789
原创 委派模式和策略模式
文章目录委派模式介绍举例策略模式介绍委派模式介绍并不属于23种设计模式,可以理解为一种特殊的静态代理,但比起代理关注过程(例如JDK动态代理的Invoke),委派更关注结果(对对应返回值的处理,派遣任务后处理结果)举例例如在SpirngMVC的dispatchservlet中对于请求的映射派遣,就用到了委派模式@RestControllerpublic class HelloController { @GetMapping("/") public String hello(@
2020-11-26 17:26:04 257 1
原创 代理模式(JDK和CGLib)
文章目录掌握代理模式的应用场景和实现原理了解静态代理和动态代理的区别。静态代理动态代理JDK实现动态代理CGLib 实现动态代理生成代理对象通过java代码通过jvm工具生成的代理对象分析了解CGLib和JDK Proxy的根本区别手写实现JDK的动态代理生成Proxy类代码生成的代理类小结手写实现小结掌握代理模式的应用场景和实现原理生活中常见的常见,如租房中介,黄牛,婚介,猎头等代码中常见的应用有事务代理,非侵入式的日志监听等.代理模式(Proxy Pattern)的定义就是为一般对象提供代理(访
2020-11-25 22:43:06 144
原创 单例模式及原型模式
文章目录前言单例模式的应用饿汉式懒汉式通过内部类初始化IDEA下多线程的调试反射暴力攻击单例解决方案及原理分析序列化破坏单例的原理及解决方案。前言单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。例如ServletContext、ServletContextConfig在 Spring 框架应用中 ApplicationContext,数据库的连接池都是单例模式单例模式的应用单例模式又分为饿汉式和懒汉式饿汉式
2020-11-25 02:59:18 1318 2
原创 第 01 章 Spring Boot 入门
文章目录前言SpringBoot的三种创建方式根据官网创建根据IDE开发工具创建手动创建启动类上的注解parent的理解参考文档前言SpringBoot的三种创建方式,启动类上的注解,parent的理解。SpringBoot的三种创建方式根据官网创建https://start.spring.io/通过点击右上角的Add Dependencies添加依赖,这里添加了一个web依赖直接通过idea导入就可以运行了根据IDE开发工具创建IDE(integrated development
2020-11-24 14:36:53 118
原创 第 00 章 准备工作(回顾xml配置SpringWeb和Java配置SpringWeb)
文章目录前言通过xml配置SpringWeb项目正文问题处理tomcat乱码解决玩转 IDEA 之 Maven依赖自动提示参考链接通过java配置SSM正文效果展示问题处理参考链接前言当前操作环境jdk1.8,maven3.6,tomcat9.0.19通过xml配置SpringWeb项目正文使用idea进行操作.首先通过idea#file->New->Project->Maven,直接选择next设置项目名和地址点击finish设置pom文件 <modelVe
2020-11-24 01:41:11 171
原创 关于SpringMvc使用时,不加@RequestParam注解,根据方法形参名也可以获取请求值的分析
首先是不加@RequestParam注解,请求方法http://localhost:8080/a/admin/hello?sex=1&name=5&password=x可以看到,方法的参数列表里都是有值的那么,这是为什么呢?首先需要了解@RequestParam注解的作用http://localhost:8080/a/admin1/hello?sex=1&...
2019-06-24 21:09:27 4751
原创 记录一次虚拟机Linux下jdk1.9的安装
本身是打算直接用wget命令网络获取的,可是现在Oracle官网下载需要登录认证了......直接下载的话就会报错401需要认证于是只好先注册,然后下载tar.gz的包通过VMware-tools的共享文件夹功能,来实现文件互传一开始安装出错,搞半天没有头绪,就把VMware-tools卸载了(可能根本就没安装上去),然后把多出来的目录都删除了rm ...
2019-04-14 15:34:56 740
原创 解决@OneToMany关联后插入新数据,先清空中间表再插入的问题
最近学习大佬的开源项目https://waylau.com/books/,有个用到hibernate的地方困惑很久,blog对象和comment对象为一对多关系,一个博客可能有多个评论 但是在配置完成之后,每插入一条新的评论,中间表就会被清空,然后重新插入,这很明显是不合理的。如果评论变多,一个博客上百条评论,每次新增一个评论都需要执行上百次的插入操作 ...
2018-12-30 09:31:02 2778
原创 最近学习Security 做个记录
按照例子进行配置之后 看了一下源码 发现每次到这里之后 就进入了 重写的方法 而不是父类本身的方法一直比较纠结 以为是父类在执行自身的方法的时候 如果有子类重写了它的方法 Security就会做一个 不清楚的操作 然后将这里的方法的入口变成重写的方法研究了一下之后 发现 回退几步的话先是获得了自己配置的类 而这个类继承了WebSecurit...
2018-11-24 15:40:30 157
原创 使用gradle的错误
一开始老以为是bean注入失败 之后才知道是类没有找到 Error creating bean with name 'blogController': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.xgl...
2018-11-05 14:56:01 960
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人