摘要: 1. java.util.concurrent概述JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发应用程序。主要包含原子量、并发集合、同步器、可重入锁,并对线程池的构造提供了强力的支持。原子量,是定义了支持对单一变量执行原子操作的类。所有类都有get和set方法,工作方法和对volatile变量的读取和写入一样。并发集合,是原有集合框架的补充,为多线程并发程序提供了支持。主要有:BlockingQueue,ConcurrentMap,ConcurrentNa 阅读全文
posted @ 2013-09-12 17:43 那些年的事儿 阅读(889) 评论(0) 推荐(1) 编辑
摘要: 1. 背景类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据。每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程提供的数据,并返回。当在运行不对称的活动时很有用。比如说,一个线程向buffer中填充数据,另一个线程从buffer中消费数据;这些线程可以用Exchange来交换数据。这个交换对于两个线程来说都是安全的。2. 示范代码package com.clzhang.sample.thread;import java.util.*;import java.util.concurrent.Exch 阅读全文
posted @ 2013-09-12 17:24 那些年的事儿 阅读(1216) 评论(0) 推荐(0) 编辑
摘要: 1. 背景CountDownLatch类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。2. 示范代码下面代码示范了如果扑克游戏一桌人都到齐了,则翻底牌:package com.clzhang.sample.thread;import java.util.*;import java.util.concurrent.Co 阅读全文
posted @ 2013-09-12 16:53 那些年的事儿 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 1. 背景CyclicBarrier类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。2. 示范代码下面这段代码演示了打扑克游戏,够4个人则开桌,共计开5桌:package com.clzhang.sample.thread;import java.util.concurrent.BrokenBarrierException;import java.util. 阅读全文
posted @ 2013-09-12 16:46 那些年的事儿 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 1. 背景类java.util.concurrent.Semaphore提供了一个计数信号量。通过Semaphore类,可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。Semaphore的构造函数中带有一个fairness的参数,用于设置是否“公平”。当fairness为true时,Semaphore保证各线程以后进先出(FIFO)的方式获得信号量。如果fairness为false,则不保证这种顺序。2. 示范代码下面这段代码演示了某种资源只限于5个线程访问:package com.clzhang.sample. 阅读全文
posted @ 2013-09-12 16:43 那些年的事儿 阅读(818) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是线程安全性调用一个函数(假设该函数是正确的)操作某对象常常会使该对象暂时陷入不可用的状态(通常称为不稳定状态),等到操作完全结束,该对象才会重新回到完全可用的状态。如果其他线程企图访问一个处于不可用状态的对象,该对象将不能正确响应从而产生无法预料的结果,如何避免这种情况发生是线程安全性的核心问题。一个类在可以被多个线程安全调用时就是线程安全的。类要成为线程安全的,首先必须在单线程环境中有正确的行为。正确性与线程安全性之间的关系非常类似于在描述ACID(原子性、一致性、独立性和持久性)事务时使用的一致性与独立性之间的关系:从特定线程的角度看,由不同线程所执行的对象操作是先后(虽然顺序 阅读全文
posted @ 2013-09-12 10:41 那些年的事儿 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 1. 基本概念程序,是一组有序的静态指令,是一种静态的概念。程序的封闭性是指程序一旦运行,其结果就只取决于程序本身;程序的再现性是指当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同,最后获得的结果也相同。进程,是一种活动,它是由一个动作系列组成,每个动作是在某个数据集上执行一段程序,整个活动结果是提供一处系统或用户功能。进程一般由三部分组成:程序、数据集合、进程控制块(PCB)。进程具有并发性和不确定性。线程,是一个进程内部的顺序控制流。线程本身不能独立运行,必须在进程中执行,使用进程的地址空间。一个进程内部包含多个顺序控制流,或者并发执行多种运算,就是多线程。创建进程的高消 阅读全文
posted @ 2013-09-12 09:37 那些年的事儿 阅读(484) 评论(0) 推荐(0) 编辑