转自:http://davidlwq.iteye.com/blog/1136095
博客分类:
今天看了下java官网上关于concurrency库的教程,了解了下基本知识,在此记录下。
线程池
concurrency库中最重要的概念当然是线程池,java中线程池是封闭在Executor接口的实现中的。当我们想执行新的线程中,传统的方法是
- new Thread(r).start()
new Thread(r).start()
但线程的创建与销毁会造成一定的资源与时间的消耗,设想一下在一个web服务器,如果对每一个新进来的请求都创建一个线程来处理,这样当线程一多,其调试、创建及其本身占用的资源会很严重,甚至有可能导致系统崩溃,利用线程池来管理线程则可以避免这种结果。
在java concurrency中提供了新的接口来供用户执行线程,主要包括如下三个:
Executor
ExecutorService
ScheduledExecutorService
而线程池则被封闭在这三个接口的实现里,根据这三个接口提供的不同的工厂方法可以创建不同的线程池。
Executor提供了一个execute方法来执行一个Runnable对象;ExecutorService则在此基础上提供了submit方法,此方法返回一个Future对象,用以监控线程状态并获得线程执行的结果;ScheduledExecutorService则提供了scheduleAtFixedRate等方法来重复执行某一个任务。
其它
除线程池之外还扩充了集合框架如BlockingQueue,ConcurrentMap等 ,并提供了Lock类来显示地添加锁。另外一个有趣的是其提供的原子变量。
假设我们有一个Counter类,为了保证其线程间同步,我们一般会这样写
- class SynchronizedCounter {
- privateint c = 0;
- publicsynchronizedvoid increment() {
- c++;
- }
- publicsynchronizedvoid decrement() {
- c--;
- }
- publicsynchronizedint value() {
- return c;
- }
- }
class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; } }
有了原子变量 后,我们可以这样写
- import java.util.concurrent.atomic.AtomicInteger;
- class AtomicCounter {
- private AtomicInteger c = new AtomicInteger(0);
- publicvoid increment() {
- c.incrementAndGet();
- }
- publicvoid decrement() {
- c.decrementAndGet();
- }
- publicint value() {
- return c.get();
- }
- }
import java.util.concurrent.atomic.AtomicInteger; class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementAndGet(); } public void decrement() { c.decrementAndGet(); } public int value() { return c.get(); } }
至于其它高级的特性如Fork/Join框架等,可以参考其它的资料。
相关推荐
Java Concurrency in Practice 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者...
Java Concurrency in practice
java concurrency in practice
Java concurrency in Practice高清pdf,带目录标签,Java并发实战
Java Concurrency in Practice源码
<<java并行编程>>英文版chm格式,英文名称<Java Concurrency in Practice>,一直想买这本书,但总是缺货,找到了电子版,分享给大家。 Java Concurrency in Practice By Brian Goetz, Tim Peierls, Joshua Bloch,...
Java Concurrency in Practice JAVA并发编程实践中文版(全)第二部分
正规PDF版本的 Java Concurrency In Practice。 经典著作,学习有益!
java concurrency programming
Java.Concurrency.in.Practice.pdf
Concurrent_Programming+Java Concurrency in Practice+langspec
Java并发编程实践(Java Concurrency in Practice) (中英版)
The Java Memory Model 207 16.1.WhatisaMemoryModel,andWhywouldIWantOne? 207 16.2.Publication 211 Summary 215 Appendix A. Annotations for Concurrency 216 A.1.ClassAnnotations 216 A.2....
Java Concurrency in Practice
java_concurrency_in_practice.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...
Using the concurrency building blocks in java.util.concurrent Performance optimization dos and don'ts Testing concurrent programs Advanced topics such as atomic variables, nonblocking algorithms, ...
《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...
java_concurrency_in_practice 英文原版 java_concurrency_in_practice 英文原版 java_concurrency_in_practice 英文原版