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