Java中日志文件的读取

问题

应用中有时候会有读取日志文件,并做近实时分析的需求(日志监控等)。但是使用类似Log4j的日志框架,日志文件可能会滚动:老的日志文件重命名成其它文件名(比如以日期为后缀),生成一个与老文件同名的新文件,这时候就需要读取日志文件的线程能够正确区分新老文件,并读取相应更新并且不会漏读数据。当然,这个问题的前提是:日志文件本身只会append,而不会在文件中间写入或者删除。本文主要分享下解决这个问题时碰到的一些问题及解决方案。

Read more

Java并发源码分析 - ForkJoin框架

功能

根据Java文档描述,ForkJoinPool中一种特殊的ExecutorService,可以执行ForkJoinTask。ForJoinTask可以在运行时Fork子任务,并join子任务的完成,本质上类似分治算法:将问题尽可能的分割,直到问题可以快速解决。对ForkJoinPool来说,与其它ExecutorService最重要的不同点是,它的工作线程会从其它工作线程的任务队列偷任务来执行。

Read more

Java并发源码分析 - ThreadPoolExecutor

为什么需要线程池?

  1. 避免在运行大量任务时,频繁的线程创建和销毁开销;
  2. 使资源的使用得到有效控制,避免创建过多的线程占用系统资源。
Read more

Java并发源码分析 - 锁

(注:文章里涉及到的代码分析,基于jdk1.7.0_10 Hotspot 64-Bit)

基本概念

Java同步机制除了内置的synchronized(包含Object.wait/notify)以外,还通过concurrent包提供了多种锁,包含ReentrantLock、Semaphore、ReentrantReadWriteLock等,以及跟Object.wait/notify类似语义的Condition接口。

Read more

中断线程的执行

中断线程是指:线程正在运行,还没有正常退出(run方法顺利结束),而某个事件的发生导致该线程必须中断当前正在执行的任务,该线程或者退出,或者等待其它事件然后再继续执行。稳定的基于线程的服务,在程序退出时,必须能够安全的释放线程所占用的资源,减少对系统性能的影响。

Read more

JVM 中可生成的最大 Thread 数量

背景

最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端。对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个:

Read more