在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。Synchronized是基于JVM实现,而ReentrantLock是基于Java代码层面实现的,底层是继承的AQS。AQS全称AbstractQueuedSynchronizer,即抽象队列同步器,是一种用来构建锁和同步器的框架。我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。当我仔细研究AQS底层加锁原理,发
来源:https://www.cnblogs.com/chenpi/p/10498921.html背景关于Mybatis插件,大部分人都知道,也都使用过,但很多时候,我们仅仅是停留在表面上,知道Mybatis插件可以在DAO层进行拦截,如打印执行的SQL语句日志,做一些权限控制,分页等功能;但对其内部实现机制,涉及的软件设计模式,编程思想往往没有深入的理解。本篇案例将帮助读者对Mybatis插件的使用场景,实现机制,以及其中涉及的编程思想进行一个小结,希望对以后的编程开发工作有所帮助。注:本案例以mybatis3.4.7-SNAPSHOT版本为例。PS:文章是挺久之前写的,当时花了一些心思,存
来源:https://www.cnblogs.com/chenpi/p/10498921.html背景关于Mybatis插件,大部分人都知道,也都使用过,但很多时候,我们仅仅是停留在表面上,知道Mybatis插件可以在DAO层进行拦截,如打印执行的SQL语句日志,做一些权限控制,分页等功能;但对其内部实现机制,涉及的软件设计模式,编程思想往往没有深入的理解。本篇案例将帮助读者对Mybatis插件的使用场景,实现机制,以及其中涉及的编程思想进行一个小结,希望对以后的编程开发工作有所帮助。注:本案例以mybatis3.4.7-SNAPSHOT版本为例。PS:文章是挺久之前写的,当时花了一些心思,存
背景介绍:你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官!面试官:小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的?这面试官是不是想坑我?是不是摆明了不让我通过?难道你不应该问线程池有哪些核心参数?每个参数具体作用是什么?往线程池中不断提交任务,线程池的处理流程是什么?这些才是你应该问的,这些八股文我已经背熟了,你不问,瞎问什么复用线程?幸亏我看了一灯的八股文,听我给你背一遍!我:线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。具体源码如下
背景介绍:你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官!面试官:小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的?这面试官是不是想坑我?是不是摆明了不让我通过?难道你不应该问线程池有哪些核心参数?每个参数具体作用是什么?往线程池中不断提交任务,线程池的处理流程是什么?这些才是你应该问的,这些八股文我已经背熟了,你不问,瞎问什么复用线程?幸亏我看了一灯的八股文,听我给你背一遍!我:线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。具体源码如下
会编程的蜗牛主要分享java编程,也会涉及其他方向的技术分享。1篇原创内容公众号序言各位好啊,我是会编程的蜗牛,作为java开发者,或者说编程人员,程序员的我们,Linux服务器总是我们一个绕不开的东西(只用Windows部署应用的当我没说)。我们在平常连接linux服务器的时候,一般用的最多的可能是Xshell、SecurityCRT、FinalShell,这几个工具我之前都有用过,总得来说,Xshell、SecurityCRT这两个都是需要正版授权的,使用中也各有千秋,Xshell界面做的比较酷炫,也支持直接拖动传输文件,在这些方面,SecurityCRT就略逊一筹了,不过作为老牌SSH连
会编程的蜗牛主要分享java编程,也会涉及其他方向的技术分享。1篇原创内容公众号序言各位好啊,我是会编程的蜗牛,作为java开发者,或者说编程人员,程序员的我们,Linux服务器总是我们一个绕不开的东西(只用Windows部署应用的当我没说)。我们在平常连接linux服务器的时候,一般用的最多的可能是Xshell、SecurityCRT、FinalShell,这几个工具我之前都有用过,总得来说,Xshell、SecurityCRT这两个都是需要正版授权的,使用中也各有千秋,Xshell界面做的比较酷炫,也支持直接拖动传输文件,在这些方面,SecurityCRT就略逊一筹了,不过作为老牌SSH连
来源:https://www.cnblogs.com/prayjourney/p/9667835.html在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种。1.同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走.这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞.2.异步调用异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式.类A的方法方法a()通
来源:https://www.cnblogs.com/prayjourney/p/9667835.html在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种。1.同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走.这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞.2.异步调用异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式.类A的方法方法a()通
parallelStream一定更快吗?大家都知道Stream分为顺序流和并行流:stream(顺序流)parallelStream(并行流)它们最大的区别就是parallelStream支持并行化处理,所以效率较stream(顺序流)肯定是要更快的。这篇不会介绍Stream基础,Stream系列我之前写过一个专题了,不懂的关注公众号Java技术栈,然后在公众号Java教程菜单中阅读。然而你确定parallelStream一定要更快吗?栈长写了一段排序的示例,分别用stream和parallelStream,对100~10000000条数据的集合进行排序,来看下执行效率究竟如何!顺序流排序:/