Java笔记
lwtxzwt
互联网程序员一枚!
展开
-
SpringBoot+MyBatis实现多数据源
本文将介绍SpringBoot+MyBatis下如何实现多数据源的配置,这在读写分离或分库的场景中非常实用。这里的实现主要是利用Spring提供的路由数据源,以及AOP。AbstractRoutingDataSource解析Spring提供了抽象类AbstractRoutingDataSource实现数据源路由。其中包含两个容器targetDataSources和resolvedDataSources,其中targetDataSources是指我们通过方法设置的目标数据源,而resolvedData原创 2020-12-30 09:13:41 · 733 阅读 · 0 评论 -
MyBatis--一级缓存与二级缓存
概述MyBatis是一款优秀的持久层框架,也是当今互联网企业中应用最广泛的持久层框架。Mybatis包含一个强大的查询缓存特性,使用缓存可以使应用更快的获取数据,避免频繁的数据库交互。一级缓存一级缓存默认开启,想要关闭一级缓存可以在select标签上配置flushCache="true"; 一级缓存存在于SqlSession的生命周期中,在同一个SqlSession中查询时,Myb...原创 2020-03-31 10:19:09 · 1059 阅读 · 0 评论 -
Java并发编程--死锁及模拟银行转账实现
死锁DeadLock死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。模拟银行转账的Demo下面我们来看一个关于银行转账的死锁例子。在银行转账问题中,我们需要对转出方和转入方两个账户加锁,以确保转账过程中金额的正确性。我...原创 2019-12-23 10:12:53 · 2041 阅读 · 0 评论 -
Java并发编程--Semaphore及模拟实现一个连接池
什么是SemaphoreSemaphore(信号量)是java.util.concurrent包下一个重要的工具类。Semaphore类似synchronized的加强版,作用是控制线程的并发数量。而就这一点而言,synchronized关键字是实现不了的。Semaphore内部也是基于AQS实现的,将AQS下的state用作保存允许的流量数,访问特定资源前,必须使用acquire方法获得...原创 2019-12-16 12:19:55 · 1000 阅读 · 0 评论 -
Java并发编程--AQS与自定义锁
什么是AQSAQS(Abustact Queued Synchronizer 抽象队列化同步器)是用来为Java的并发同步组件提供统一的底层支持,例如 ReentrantLock, CountdowLatch 都是基于AQS实现的。AQS采用模板方法设计模式,我们可以通过简单的继承实现模板方法,来自定义我们自己的锁。AQS的常用方法AQS定义两种资源共享方式:Exclusive(...原创 2019-12-02 13:25:38 · 1456 阅读 · 1 评论 -
Java并发编程--ForkJoin
概述从JDK1.7开始,Java提供ForkJoin框架用于并行执行任务,它的核心思想就是分而治之,本文将详细介绍这个框架的使用。什么是分而治之分而治之的基本思想是:将一个规模为N的问题分解为K个规模较小的子问题(K <= N),这些子问题相互独立且与原问题性质相同,求出子问题的解,就可以求出原问题的解。分而治之也是递归的一种,一般的实现步骤为:(1)设定阈值K(...原创 2019-11-22 11:26:55 · 1021 阅读 · 0 评论 -
Java高级特性--反射详解
本人博客:https://cherishlife.com.cn/blog/22有兴趣的朋友支持下,谢谢!概述在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。java.lang.Class类是进行反射操作的源头所在,所有的反射操作都是通过这个类展开的。...原创 2019-10-24 15:03:13 · 1690 阅读 · 0 评论