聊聊JAVA的线程池

1. 介绍

并发包提供了几种不同类型的线程池。今天我们来更加仔细地看看其实现原理。下面的分析适用于JDK1.7

2. 类分析

类的结构如下:

2.1 池分类

通过ThreadPoolExecutor创建的池: 例如Fixed pool 、Cached pool和singleThread等线程池。在1.8中还引入了WorkStealingPool这个基于ForkJoinPool里面窃取工作算法的线......

ForkJoinPool解读

1. 介绍

JDK1.7在并发包里面引入了这个玩意儿。根据 Doug Lea 的论文——《A Java Fork/Join Framework》而来。主要通过分而治之(把大任务分割成若干个小任务)然后合并结果这种思想来实现的线程池。有更加好的并发性能。之所以有更好的并发性能,是因为其充分利用了所有线程的工作能力,避免空闲线程,充分发挥多核并行的处理能力。这个关键是后面的working stealing算法。

此外强烈推荐下Java7中的ForkJoin并发框架初探(中)这个系列的文章,作为我这篇文章的补充阅读吧。写的很好。

PS: 本文的介绍主要以JDK1.7版本为例

......

从Runnable到Callable谈到ExecutorServer的submit方法和execute方法

1. 介绍Runnable和Callable

创建线程类一般使用的方式有三种:

继承Thread调用start方法

实现Runnable接口调用run方法

实现Callable接口调用call方法

如今,第一种方式肯定是差不多淘汰了。因为用继承约束很大。

关于使用Runnable和Callable接口的异同在StackoverFlow的一篇帖子The difference between the Runnable and Callable interfaces in Java中说的比较清楚。

主要区别就是:

Runnable能做得,Callabl......

c10k问题与异步非阻塞

1. 什么是C10K问题

字面意思就是concurrency 10K,实际上就是说如何解决大并发问题。

2. 常见解决方案

2.1 异步非阻塞

2.1.1 I/O模型

出现C10K问题,各个操作系统都从OS层面提供了异步非阻塞的IO模型

FressBS有kqueue,Windows有IOCP,linux有epoll。

2.1.2 新IO模型的产物

在这种异步非阻塞IO模型下,也诞生了很多优秀产品:

nginx:高性能的HTTP和反向代理服务器

libevent:高性能网络库

node.js:基于 Chrome V8 引擎的 JavaScript 运行......

原子操作的实现原理

1. 介绍

本文是我看了并发编程网“聊聊并发”系列文章的总结。查看完整原文地址点我查看

本文分别讨论intel处理器何java是如何实现原子操作的

2. 基本概念定义

3. 处理器实现原子操作的方法

对于内存读写1个字节就是一个原子操作。这些最基本的原子操作是由处理器本身来保证的。

处理器保证原子操作的方法主要是:

3.1 总线锁定

我们以i++为例,通过下图可以发现在多处......