概述log4j是一款非常方便而且强大的开源日志项目,在经过简单的配置后,可以达到相当不错的效果。头脑一热决定对log4j的源码进行一定的阅读,其初衷是希望通过源码的阅读,提高写代码的能力。log4j其核心概念可分为:logger 日志接收器,即程序员在自己的代码中使用如logger.error(.....
分类:
其他好文 时间:
2014-08-31 17:08:11
阅读次数:
297
Collections工具类里的
Collections.synchronizedList
public static List synchronizedList(List list) {
return (list instanceof RandomAccess ?
new SynchronizedRandomAccessList(...
分类:
编程语言 时间:
2014-08-28 13:20:09
阅读次数:
200
前面讲ScheduledThreadPoolExecutor曾经重点讲到了DelayedWorkQueue,这里说的PriorityBlockingQueue其实是DelayedWorkQueue的简化版本,实现了按序排列元素的功能。也就是说PriorityBlockingQueue是维护一个按序排...
分类:
编程语言 时间:
2014-08-28 11:03:09
阅读次数:
211
Exchanger可以看做双向数据传输的SynchronousQueue,即没有生产者和消费者之分,任意两个线程都可以交换数据。在JDK5中Exchanger被设计成一个容量为1的容器,存放一个等待线程,直到有另外线程到来就会发生数据交换,然后清空容器,等到下一个到来的线程。从JDK6开始,Exch...
分类:
编程语言 时间:
2014-08-27 23:20:38
阅读次数:
270
学过操作系统的朋友都知道信号量,在java.util.concurrent包中也有一个关于信号量的实现:Semaphore。从代码实现的角度来说,信号量与锁很类似,可以看成是一个有限的共享锁,即只能被有限数量的线程使用的共享锁。因为存在计数,因此Semaphore的构造函数有参数permits来设定...
分类:
编程语言 时间:
2014-08-26 17:00:06
阅读次数:
208
刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动。
源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。
说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。
虽...
分类:
编程语言 时间:
2014-08-25 21:18:24
阅读次数:
258
Application初始化日志
15:23:12.790 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemProperties] PropertySource with lowest search precedence
15:23:12.797 [main] DEBUG o.s.core.env.StandardEnv...
分类:
移动开发 时间:
2014-08-25 19:20:44
阅读次数:
345
SynchronousQueue是一种很特别的BlockingQueue,任何一个添加元素的操作都必须等到另外一个线程拿走元素才会结束。也就是SynchronousQueue本身不会存储任何元素,相当于生产者和消费者手递手直接交易。SynchronousQueue有一个fair选项,如果fair为t...
分类:
编程语言 时间:
2014-08-25 16:39:44
阅读次数:
278
ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,同时实现了ScheduledExecutorService接口。public class ScheduledThreadPoolExecutor extends ThreadPoolEx...
分类:
编程语言 时间:
2014-08-21 12:53:44
阅读次数:
190
这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭。先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int corePoolSize, int ...
分类:
编程语言 时间:
2014-08-20 22:35:02
阅读次数:
233