![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
vernonzheng
java/clojure/nodejs/python
关注大型服务器程序开发、中间件、系统架构、分布式、大数据等等。
blog:vernonzheng.com
email:kevonzheng@gmail.com
豆瓣:http://www.douban.com/people/79461162/
github:https://github.com/vernonzheng
展开
-
java的concurrent用法详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的转载 2012-10-12 11:04:25 · 3469 阅读 · 0 评论 -
Java多线程(十二)之线程池深入分析(下)
一、数据结构与线程构造方法由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要求也很能够猜测出其数据结构出来。原创 2012-12-15 22:48:55 · 7324 阅读 · 6 评论 -
Java多线程(十)之ReentrantReadWriteLock深入分析
一、ReentrantReadWriteLock与ReentrantLock 说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。ReentrantLock实现了标准的互斥操作,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。前面的章节中一直在强调这个特点。显然原创 2012-12-15 00:02:08 · 8154 阅读 · 4 评论 -
Java多线程(九)之ReentrantLock与Condition
一、ReentrantLock 类1.1 什么是reentrantlockjava.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock 的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它原创 2012-12-12 21:41:39 · 56093 阅读 · 4 评论 -
Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
一、引言Semaphore :一个计数信号量CountDownLatch :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 CyclicBarrier :一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 Exchanger原创 2012-12-10 22:50:10 · 8586 阅读 · 2 评论 -
Java多线程(七)之同步器基础:AQS框架深入分析
一、什么是同步器多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx 。这个共同的语义可以称之为同步器。可以认为以上所有的锁机制都可以基于同步器定制来实现的。而juc(java.util.concurrent)里的思想是 将这些场景抽象出来的语义通过统一的同步框架来支持。juc 里所有的这些锁机制都是基原创 2012-12-09 20:38:03 · 30392 阅读 · 5 评论 -
Java多线程(五)之BlockingQueue深入分析
一、概述:BlockingQueue作为线程容器,可以为线程同步提供有力的保障。二、BlockingQueue定义的常用方法1.BlockingQueue定义的常用方法如下: 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除原创 2012-12-01 23:15:41 · 67441 阅读 · 16 评论 -
Java多线程(二)之Atomic:原子变量与原子类
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期原创 2012-11-21 09:19:35 · 19786 阅读 · 1 评论 -
Java多线程(四)之ConcurrentSkipListMap深入分析
一、前言 concurrentHashMap与ConcurrentSkipListMap性能测试在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点:1、ConcurrentSkipLis原创 2012-11-30 21:10:44 · 12080 阅读 · 5 评论 -
Java多线程(三)之ConcurrentHashMap深入分析
一、Map体系Hashtable是JDK 5之前Map唯一线程安全的内置实现(Collections.synchronizedMap不算)。Hashtable继承的是Dictionary(Hashtable是其唯一公开的子类),并不继承AbstractMap或者HashMap。尽管Hashtable和HashMap的结构非常类似,但是他们之间并没有多大联系。Concurrent原创 2012-11-29 21:56:28 · 8364 阅读 · 3 评论 -
Java多线程(六)之Deque与LinkedBlockingDeque深入分析
一、双向队列DequeQueue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Q原创 2012-12-07 00:00:22 · 21580 阅读 · 2 评论 -
Java多线程(一)之volatile深入分析
volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。什么是线程的可见性:锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前原创 2012-11-19 23:29:55 · 11315 阅读 · 8 评论 -
Java 多线程同步问题的探究(三、Lock来了,大家都让开【1. 认识重入锁】)
我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK 5中新引入的并发框架中的锁机制。我想很多购买了《Java程序员面试宝典》之类图书的朋友一定对下面这个面试题感到非常熟悉:问:请对比synchronized与java.util.concurrent.locks.Lock 的异同。答案:主要相同点:L转载 2011-12-09 13:20:23 · 3352 阅读 · 0 评论 -
Java多线程(十一)之线程池深入分析(上)
线程池是并发包里面很重要的一部分,在实际情况中也是使用很多的一个重要组件。下图描述的是线程池API的一部分。广义上的完整线程池可能还包括Thread/Runnable、Timer/TimerTask等部分。这里只介绍主要的和高级的API以及架构和原理。大多数并发应用程序是围绕执行任务(Task)进行管理的。所谓任务就是抽象、离散的工作单元(unit of work)。把一个原创 2012-12-15 15:58:39 · 14477 阅读 · 12 评论