- 博客(13)
- 收藏
- 关注
原创 JUC源码解析-阻塞队列-LinkedBlockingQueue与ArrayBlockingQueue
什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会阻塞等待,直到队列变为非空或超时。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景。阻塞队列提供了四种处理方法:抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Q...
2019-02-28 23:13:07 347
原创 JUC源码解析-阻塞队列-迭代器(二)
4,删除remove public void remove() { // assert lock.getHoldCount() == 0; final ReentrantLock lock = ArrayBlockingQueue.this.lock; lock.lock(); try ...
2019-02-28 16:56:02 275
原创 JUC源码解析-阻塞队列-迭代器(一)
本篇来分析下阻塞队列里迭代器的实现,以ArrayBlockingQueue源码来分析。首先在开始前想一想,如何实现阻塞队列的迭代器功能?在并发下有些线程在读,有些在改,还有些在使用迭代器遍历,怎么确保安全性?用独占锁将这些操作隔离开,我们看 ArrayBlockingQueue 确实是这么做的。既然安全性得到保障那么还有什么问题是需要考虑的 ?过时数据问题。假设一个线程从此时的 takeI...
2019-02-28 16:55:41 448
原创 MySQL练习题记录
题目来自LeetcodeSwap Salary只用一个 SQL 查询,将 sex 字段反转UPDATE salarySET sex = CHAR ( ASCII(sex) ^ ASCII( 'm' ) ^ ASCII( 'f' ) );UPDATE salary SET sex = CASE sex WHEN 'm' THEN 'f' ...
2019-02-27 03:50:19 841
原创 Java内存区域与对象
本片文章主要是《深入理解Java虚拟机》的读书笔记1 运行时数据区域1.1 程序计数器由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这...
2019-02-22 16:46:49 180
原创 由入栈/出栈序列求所有出栈/入栈序列
给出一个数组,代表入栈顺序,求所有出栈可能性?给出一个数组,代表出栈顺序,求所有入栈可能性?这两题解法相同,可利用 全排列 求出所有组合,再进行可能性分析。全排列代码如下: public List<List<Integer>> permute(int[] nums) { List<List<Integer>> resul...
2019-02-21 00:34:11 658
原创 SpringMVC之DispatcherServlet(一)
上一篇介绍了ContextLoaderListener,作用就是容器启动时创建WebApplicationContext存储在ServletContext中。本文将介绍SpringMVC核心DispatcherServlet,它是Servlet接口的实现类Servlet是一个Java编写的程序,基于Http协议,在服务端运行,主要处理客户端的请求并将结果发送给客户端。其生命周期由Servlet...
2019-02-18 14:25:48 10101 1
原创 LeetCode动态规划题
斐波那契数列类LeetCode70. Climbing Stairs题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。dp[ i ] = dp[ i-1 ] + dp[ i-2 ];public int climbStairs(int n) { if (n &amp;amp;amp;amp;lt;= 2) { return n; } int pre2 = ...
2019-02-12 17:12:36 366
原创 SpringMVC之ContextLoaderListener
ContextLoaderListener的作用就是启动Web容器时自动装配ApplicationContext的配置信息。它实现了ServletContextListener接口,在web.xml中配置这个监听器,启动容器时就会执行它的实现类。对于ServletContextListener,你可以利用它在为客户端请求提供服务之前像 向ServletContext中添加任意对象。该对象将在Se...
2019-02-12 12:27:10 1850
原创 spring事件发布机制
关于Java的事件监听机制Spring事件机制是观察者模式的一种实现,但是除了发布者和监听者者两个角色之外,还有一个EventMultiCaster的角色负责把事件转发给监听者。观察者模式Spring的事件监听(也称事件驱动)是观察者模式的一种实现,比较常见的有发布-订阅模型。通常我们利用消息队列来实现不同系统之间的解耦,如用户注册完成后,可以向消息队列发布一条消息,然后订阅了此topic的...
2019-02-08 06:28:32 1306
转载 java事件监听机制
java 事件机制java的事件机制一般包括三个部分:EventObject,EventListener和Source。EventObjectjava.util.EventObject是事件状态对象的基类,它封装了事件源对象以及和事件相关的信息。所有java的事件类都需要继承该类。EventListenerjava.util.EventListener是一个标记接口,就是说该接口内是没有...
2019-02-07 10:56:07 254
原创 java.lang.Class.isPrimitive()
用来判断Class是否为基本数据类型,有九种预定义的Class对象代表的八个基本类型和void。这些都是由Java虚拟机创建的,并且具有相同的名称,它们代表即boolean, byte, char, short, int, long, float, 和double 等原始类型。public static void main(String[] args){ Class stringCla...
2019-02-04 07:57:23 514
原创 Java-SPI
SPI即Service Provider Interface,Service提供者接口:提供给服务提供厂商与扩展框架功能的开发者使用的接口。java spi提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。很多框架都使用了java的SPI机制,如JDBC4中的java.sql.Driver的SPI实现(mys...
2019-02-01 17:33:34 457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人