- 博客(33)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 多线程并发编程-死锁问题和对应的解决方案汇总-面试常考
一、首先死锁需要满足以下几个条件: 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束。这是从网上其他文档看到的死锁产生的四个必要条件:1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。 3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。 4...
2020-05-24 00:33:51 464
原创 多线程并发编程-并发工具类----CountDownLatch原理分析&适用场景分析&对比join差异
一、前言: 首先,在前面我们在学习线程间通信的时候,学到一个关键字:join,例如在main方法中,执行t1.join(),t2.join(),则main主线程会阻塞运行,直到t1,t2分别执行完,回调阻塞在t1,t2上面的线程。这是main线程会重新获得执行契机。 今天咱们学习的CountDownLatch,是非常有用的开发工具类,在JDK1.5版本中,开发包,提供了CountDownLatch也可以实现join的功能,并且比join支持的功能更多,它允许一个或多个线程等待其他...
2020-05-31 12:39:51 272
原创 多线程并发编程--AQS阻塞队列、Condition.await()/signal()源码分析、生产-消费者案例分享 -上
一、前言: 复习一下之前学习的知识点,之前咱们学习了synchronized、wait、notify相关功能,synchronized实现锁,有隐形的可重入功能(同一个线程,可以重复进入一把锁); wait/notify实现线程间的异步通信;wait会释放锁,进入等待队列(线程状态:WAITING) ,需要依赖别的线程notify唤醒;其中wait(long time) 超时等待(线程状态:TIMED_WAITING),时间到,自动转入就绪队列,竞争锁。二、今...
2020-05-30 16:03:23 463
原创 多线程并发编程-ThreadLocal详讲-通俗易懂
一、前言: 多线程并发编程,为了解决共享变量的可见性问题,可以使用volatile关键字,解决共享变量在线程之间的可见线性,A修改共享变量后,B读取的时候,会自动从主内存读取,同时更新CPU高速缓存。 如果线程需要在线程自身维护一个共享变量副本,减少多线程之间的干扰。可以使用ThreadLocal,我们看一下线程的UML模型,在Thread中维护了ThreadLocal.ThreadLocalMap成员变量,ThreadLocalMap是Entry(key,value)键值...
2020-05-26 13:21:48 225
原创 多线程编程-线程间通信-Join指令-使用场景与原理分析
一、首先,线程间通信的场景有几种: 1)A线程while()循环时,可以通过中断指令,B线程通知A线程退出,这样A线程即使在wait/sleep,都会收到中断通知,代码层面主动捕获异常,根据捕获的异常做对应逻辑处理。 2)A线程在执行wait指令时,当前线程会释放锁,进入等待队列。等待队列到就绪队列,需要其他线程调用notify或者notifyALL指令,这A线程可以就绪队列,重新竞争锁。 3)A线程如果会优于B线程执行完成,如果我们需要A线程等待B线程执行完成,再继续往下...
2020-05-25 13:15:39 426
原创 多线程并发编程-synchronized 与 ReentrantLock 区别,面试常问
一、前言: 在多线程并发编程中,基本都会遇到锁的概念,锁的几个基本特征:互斥性 可重入性、 jdk自带的关键字synchronized,实现了java最原始的重量级锁,根据锁的范围,有对象锁和类锁两个概念;在Jdk 1.5中,引入了java.util.concurrent包(后面统称:JUC),引入了Lock锁。二、具体对比: synchronized Lock...
2020-05-25 10:39:49 208
原创 多线程并发编程----如何解决wait()死锁等待问题
一、首先大家浏览一下我的上一篇博文,这里有“事故”现场: https://blog.csdn.net/jason_jiahongfei/article/details/106302871二、为了解决wait()死锁问题,首先咱们得了解死锁产生的原因,先从线程的状态流转说起: 最本质的两个方法: lock.wait()//必须等待别人唤醒,生活完全不能自理。 lock.wait(long time)//等待时间到了,如果没有得到唤醒通...
2020-05-23 19:44:35 2391
原创 多线程并发编程-如何解决Wait相互等待问题??
以下代码例子会产生两个线程互相等待的问题,不用wait(long XX) 如何解决相互等待问题??import com.jason.support.JasonTemplate;import java.util.*;/** * @program: JasonSpringBoot * @description * @author: 大龄程序猿 * @create: 2020-05-23 15:15 **/public class TestWait { public fina..
2020-05-23 17:08:14 1081 3
原创 多线程并发编程-线程安全问题-数据原子性问题&解决方案
一、首先通过下面一个例子来看一下,数据一致性问题:package org.jason.thread;import static java.lang.Thread.sleep;/** * 2020/5/22 * author jason */public class ThreadSyn { public static int count=0; public static void main(String[] args) { Thread t1= new
2020-05-22 13:04:16 390
原创 多线程编程-线程的状态&状态切换
一、Java概念中,线程的状态有哪些: java 的线程有以下6中:new状态、终止状态、WAITING状态、TIMEDWAITING、就绪、运行、终止。 操作系统层面,线程只有5中,去掉NEW&终止状态。...
2020-05-21 23:34:57 317
原创 多线程并发编程入门之线程的并行与并发
一、首先,理解并行与并发的含义: 现在很多机器都是多核,例如当前是4核,那么并行的数量就是4;并发是指我们服务器应用单位时间内,同时处理请求的能力。 从多线程的特点来看: 1)同步: 缺点:发短信流程如果异常,则会影响生单的流程,类似一个数据事务;仔细研究发现,发送短信并非生单流程中的关键路径,可以采用异步的方式,缩短关键业务的关键路径;针对非关键路径的流程采用异步执行的方式,例如工单表、插入MQ队列、单独起异步线程等等方式执行,如果处理失败...
2020-05-21 22:01:22 397
原创 多线程编程-Executors线程池 详解
一、前言:Java通过Executors提供四种线程池,分别为:1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程,有隐患。2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行:ScheduledExecutorService pool2=Executor
2020-05-20 00:19:30 643
原创 多线程编程-java线程创建的几种方式,初学者福利-面试常问
一、前言: java中,线程的创建大概有以下几种方式: 1)继承Thread,重写void run()方法; 2)实现Runnable接口,重写void run()方法; 3)实现Callable接口,重写call方法;FutureTask包装Callable接口。二、重点写一下Callable接口: 自定义类实现Callable接口,重写call方法; 用心创建的Callable 对象,重建FutureTask,同时...
2020-05-19 23:45:42 266
原创 敏捷管理-PDCA循环(戴明环)
PDCA循环,也称戴明环,是由美国著名质量管理专家戴明(W、E、Deming)首先提出的一套管理理论。这个循环主要包括四个阶段:计划(Plan)、实施(Do)、检查(Check)和处理(Action),及八个步骤。八个步骤是四个阶段的具体化。1、计划(P)阶段 计划是质量管理的第一阶段。通过计划,确定质量管理的方针、目标,以及实现该方针和目标的行动计划和措施。计划阶段包括以下四个步骤: 第一步,分析现状,找出存在的质量问题。 第二步,分析原因和影响因素,针对找出的质量问题,分析产生的原...
2020-05-19 09:24:33 3523
原创 多线程编程-线程间通信-wait¬ify
一、数据模型: 知识储备:类锁,对象锁,不清楚的,可以学习一下二、以生产者、消费者为例,实现线程间的通信:package com.jason.thread.product;import java.util.Deque;import static java.lang.Thread.sleep;/** * @program: JasonSpringBoot * @description * @author: 大龄程序猿 * @create: 2020-05...
2020-05-18 00:20:51 210
原创 ORM框架-Mybatis-动态SQL
一、前言: 相比Hibernate全自动框架,Mybatis虽然是半自动框架,它的魅力在于可以基于复杂的业务场景,编写复杂的SQL,与此同时对程序猿SQL掌握能力也提出比较高的要求,不仅需要编写SQL,还需要考虑SQL执行性能。本章节,将带着大家一些熟悉动态SQL的标签写法:二、动态语句写法:if choose (when, otherwise) trim (where, set) foreach...
2020-05-17 19:10:52 450
原创 SpringBoot调试:Exception in thread main java.lang.AbstractMethodError: org.springframework.boot.cont
报错信息:Exception in thread “main” java.lang.AbstractMethodError: org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z有经验的开发人员都知道,SpringBoot是由Spring5演变而来,报这个错误时因为pom.xml中引入了spring的依赖,去掉之后就可以正常启动了。.
2020-05-17 12:26:24 3293
原创 Ideal 工具快速新建一个SpringBoot工程
1、新建工程:2、next: maven相关配置,这里就不多啰嗦了:3、模板选择:4、搭建完成:
2020-05-17 10:17:57 290
原创 BeanFactory与FactoryBean的区别
一、这两个概念,命名比较相似,刚接触源码的时候,困惑了一票程序猿: 1)BeanFactory 是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范,顶层接口。 2)FactoryBean 也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单的工厂模式和装饰模式 ,我们可以在getObject()方法中灵活配置. 区别:FactoryBean是个Bean.在Spring中,所...
2020-05-16 23:14:41 17566 1
原创 JDK动态代理与Cglib的区别
一、前言:CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。cglib封装了asm,可以在运行期动态生成新的class,cglib用于AOP;JDK动态代理,是java反射工具包自带的工具类;简单对比:从实现机制角度出发: 1)JDK代理类需要实现InvocationHandler接口,重写invoke方法; 2)相比JDK这个特征,cglib却没...
2020-05-16 17:14:38 663
原创 ORM框架-Mybatis-缓存
一、前言mybatis 相比hibernate,有自身的缓存,分为两层,一级缓存面向SqlSession,生命周期跟Session保持一致,不可以物理关闭;二级缓存是全局缓存,所有的Session共享,可以关闭。如下图:为mybatis的缓存架构图:...
2020-05-14 00:59:03 237
原创 GIT操作规范-小白经典操作
一、登陆gitHub: https://github.com/创建账号,以及创建github客户端,这里就不具体说了,可以参考这篇帖子:https://www.cnblogs.com/ycs0403/p/12116650.html创建代码分支:二、上传本地代码: 本地代码仓库位置:右键git bash 1、设置本地远程push的用户名,密码: git config --global user.name git config...
2020-05-13 00:04:20 274
原创 Spring事务隔离级别详解
我们说的事务隔离级别是指并发事务,操作相同的数据,引发的问题,数据库针对这种业务场景,满足不同的业务诉求,提供四种隔离级别:1、读未提交(Read Uncommitted): 一个事务读到另一个事务还没有提交的数据。如果另一个事务失败了,回滚了,那么第一个事务读到的数据就是无效的数据。这就是脏读。 场景:屌丝A操作存款业务,一次性将工资50000都存到LP指定的账户上,LP这时刚好查看到了账户信息,心中充满喜悦;屌丝A在事务提交之前,突然发现忘记存私房钱了,于是赶紧撤销,改...
2020-05-11 16:38:11 1691 3
原创 ORM框架-DbUtil轻量级工具结合C3P0的使用
一、前言: C3P0是存放了一堆Connection对象的连接池。避免了java每次加载驱动和连接数据库;DbUtils简化了Java执行sql的语句,并将结果封装成对象列表。1、Dbutils是什么 Dbutils:主要是封装了JDBC的代码,简化dao层的操作。 作用:帮助java程序员,开发Dao层代码的简单框架。 框架的作用:帮助程序员,提高程序的开发效率。 Dbutils是由Apache公司提供。2、为什么需要Dbutils ...
2020-05-11 00:55:32 348
原创 ORM框架-Mybatis框架-入门篇
一、前言: 相信一帮80后的老牌程序猿们,一定知道ibatis,没错今天我们今天聊的Mybatis框架,其实就是ibatis,大概在10年的时候,在ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下;也就是说ibatis2.*,mybatis3.*。 那么Mybatis相比古老的Hibernate框架,有啥区别呢?这里简单的对比一下: 首先hibernate是对jdbc的封装,封装Bean与数据库的一条记录的隐...
2020-05-10 22:58:16 361
原创 手撕Spring-DI代码框架
一、DI 依赖注入: 传统的通过XML文件的方式配置依赖关系,相信有经验的Spring开发人员应该还清晰记得如何配置: 例如:<bean id="beanImpl" class="com.chensan.spring.chapter2.BeanImpl2"/><bean id="beanApiDecorator" class="com.chensan.s...
2020-05-05 23:17:04 251
原创 手撕Spring-IoC代码框架
一、IoC(Inversion of Control) 本篇我们重点来讲解一下在Spring框架中,如何初始化Bean,大概分为三步: 1、定位:根据包扫描路径,确认扫描路径; 2、加载:将扫描路径下的类相关信息,统一加载到内存; 3、注册:初始化BeanFactory,数据结构: //存储注册信息的BeanDefin...
2020-05-04 01:27:52 352
window下使用arthas分析JVM内存
2021-08-12
日常新系统建设,应用部署时,JVM虚拟机参数大家都会如何配置
2021-08-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人