摘要:
背景 在自己接触到的业务系统中,很多地方会有定时任务的需求,比如支付的交易超时自动关闭、连接超时、支付异步通知等等。常见的做法有: 1.考虑使用JDK中的Timer定时任务来实现 2.通过封装quartz搭建专门的调度平台来管理 目前项目中运用的是第2种。 场景应用 看到netty中hashedwh 阅读全文
摘要:
项目中经常会用到java多态这个特性,之前只知道一些皮毛,现在发现自己对它并没有一个系统的认识,想从新梳理下自己的基础库。 看了java编程思想中对象导论,关于继承的描述:java中的类型不仅仅只是描述了作用于一个对象集合上的约束条件,同时还有与其他类型的之间的关系。可以创建一个基类来表示系统中某些 阅读全文
摘要:
从控制台看不出任何有用信息,通过JUnit右键”Copy Failure List”将信息拷贝出来 TestStart.start initializationError(org.junit.runner.manipulation.Filter) java.lang.Exception: No te 阅读全文
摘要:
一、背景 最近在看<Java并发编程实战>这本书,看到共享变量的可见性,其中说到“加锁的含义不仅仅局限于互斥行为,还包括内存可见性”。 我对于内存可见性第一反应是volatile:被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。 原因是volatile 阅读全文
摘要:
一、背景 在看并发包源码的时候看见过LockSupport,今天恰巧看到LockSupport字眼,于是看下jdk1.7中的源码结构。想着它应该是运用多线程的锁工具的,到底似乎怎么实现的呢? 二、使用 于是自己写个demo对比下synchronized 场景:main线程中创建一个线程A,想让thr 阅读全文
摘要:
一、背景 在以前的随笔中说道过ArrayList的foreach迭代删除的问题:ArrayList迭代过程删除问题 按照以前的说法,在ArrayList中通过foreach迭代删除会抛异常:java.util.ConcurrentModificationException 但是下面这段代码实际情况却 阅读全文
摘要:
一.背景:使用工具类 Arrays.asList()把数组转换成集合时,使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。 二.分析:既然是List为何不能进行增删改的操作? 1.Arrays.asLis 阅读全文
摘要:
一:问题抛出 假设在出现高并发的情况下对一个整数变量做依次递增操作,下面这两段代码是否会出现问题? 1. 2. 其实在使用Integer的时候,必须加上synchronized保证不会出现并发线程同时访问的情况,而在AtomicInteger中却不用加上synchronized,在这里AtomicI 阅读全文
摘要:
一:首先看下几个ArrayList循环过程删除元素的方法(一下内容均基于jdk7): 二:如果上面的结果算错的话,先看下ArrayList的源码(add和remove方法) ArrayList继承AbstractList,modCount是AbstractList中定义用于计算列表的修改次数的属性。 阅读全文
摘要:
通过ReentrantLock与Condition的设计,以数组为基础,可以实现简单的队列和栈的数据结构,临界阻塞的效果。 ReentrantLock相对于synchronized比较大的一个区别是有条件变量:Condition,很大一个程度上是为了解决Object.wait/notify/noti 阅读全文
摘要:
在进行ReentrantLock的源码解析之前先了解些基本概念: (1)AQS:AbstractQueuedSynchronizer (2)独占锁:锁在一个时间点只能被一个线程锁占有。根据锁的获取机制,它又划分为公平锁和非公平锁。公平锁是按照通过CLH等待线程按照先来先得的规则公平的获取锁;而非公平 阅读全文