《Java7程序设计》第24章 并发工具
来源:互联网 发布:阿里云学生机续费40.8 编辑:程序博客网 时间:2024/05/18 02:22
Thread类和synchronized关键字太底层。属于Java语言内置的支持。
Java5在java.util.concurrent包和子包中添加了并发工具(Concurrency Utility)
在这种包中设计这些类型是为了更好地替代Java内置的线程和同步特性。
原子变量,Executor:Callable和Future。
24.1 原子变量
java.util.concurrent.atomic包中提供了这些类:AtomicBoolean,AtomicInteger,AtomicLong和AtomicReference。原子操作方法:addAndGet,decrementAndGet,getAndIncrement,incrementAndGet。
24.2 Executor和ExecutorService
无论什么时候,都应该尽可能不要用java.lang.Thread线程来执行Runnable任务,而应该用java.util.concurrent.Executor或者它的子接口ExecutorService的一个实现来执行Runnable任务。Executor:
void execute(java.lang.Runnable task)
ExecutorService是Executor的一个扩展,添加了终止方法和执行Callable的方法。
Callable和Runnable相似,只不过它可以返回一个值,并且便于通过Future接口来完成删除的任务。
一般来说不需要自己编写Executor(或者ExecutorService)接口的实现,而是利用Executors类(一个工具类)中定义的其中一个静态方法来得到它。
public static ExecutorService newSingleThreadExecutor()
包含单个线程的Executor。
public static ExecutorService newCacheThreadPool()
返回一个Executor,当提交的任务越来越多时,这个Executor就会创建更多的线程。(在内存不足时还创建新的进程,就很可能导致内存不足)
public static ExecutorService newFixedThreadPool(int numOfThreads)
确定返回的Executor中要保持多少线程。
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable(){
@Override
public void run(){
//执行一些相关的操作
}
}
);
24.3 Callable和Future
Callable是并发工具中最有价值的成员之一。Callable是一项任务,它返回一个值,并且能抛出一个异常。Callable和Runnable类似,只不过后者不能返回值或者抛出异常。Callable定义了一个call方法:
V call() throws java.lang.Exception
可以将一个Callable传递给ExecutorService的一个submit方法:
Future<V> result = executorService.submit(callable);
submit方法返回一个Future,它可以用来取消任务,或者获取Callable的返回值。
要想取消一项任务,可以调用Future对象中cancel方法:
boolean cancel(boolean myInterruptIfRunning)
为了得到Callable的结果,可以调用相应Future的get方法。
V get()会阻塞,直到任务完成
V get(long timeout, TimeUnit unit)时间单位
Future:
booleanisCancelled()
boolean isDone()
24.5 锁
Lock接口。aLock.lock();
try{
//利用锁定的资源完成一些操作
}finally{
aLock.unlock();
}
boolean tryLock()
boolean tryLock(long time,TimeUnit timeUnit)
API中的类和接口是要用来代替Java中比较低级的线程机制,例如Thread类和修饰符synchronized。
0 0
- 《Java7程序设计》第24章 并发工具
- 《Java7程序设计》第24章 并发工具
- 《Java7程序设计》第5章 核心类
- 《Java7程序设计》第10章 枚举
- 《Java7程序设计》第11章 集合
- 《Java7程序设计》第7章 异常处理
- 《Java7程序设计》第12章 泛型
- 《Java7程序设计》第15章 Swing基础知识
- 《Java7程序设计》第23章 Java线程
- Java7并发编程指南——第六章:并发集合
- 《Erlang程序设计》学习笔记-第7章 并发
- 《Erlang程序设计》学习笔记-第8章 并发编程
- .NET组件程序设计 第8章 多线程和并发管理
- 谭浩强C++程序设计第14章C++工具
- Linux程序设计笔记(第9章 开发工具)
- JAVA7 新增工具api
- 实战java高并发程序设计第之java并发基础
- java7并发编程学习笔记
- js中的变量提升
- 《Java7程序设计》第12章 泛型
- 《Java7程序设计》第15章 Swing基础知识
- 自绘CListCtrl(II)
- 《Java7程序设计》第23章 Java线程
- 《Java7程序设计》第24章 并发工具
- 学习Golang语言(3)
- GXPT环境搭建——私服Nexus(二)
- lcc源代码解析之sym.c
- 洗刷刷,呜呜,刷刷
- System.exit(0)和System.exit(1)区别
- Archlinux 安装记录(一)
- 从稀疏表示到低秩表示(二)
- Javascript作用域和变量提升