转自: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并行编程>>英文版chm格式,英文名称<Java Concurrency in Practice>,一直想买这本书,但总是缺货,找到了电子版,分享给大家。 Java Concurrency in Practice By Brian Goetz, Tim Peierls, Joshua Bloch,...
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开发者必读的经典之作,由Brian Goetz等多位专家共同撰写。这本书深入浅出地探讨了Java平台上的并发问题,帮助读者理解和掌握如何编写高效、可靠且可维护的多线程应用程序。以下是该书...
Java Concurrency in Practice JAVA并发编程实践中文版(全)第二部分
《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和Doug Lea等专家共同编写。这本书深入探讨了Java平台上的多线程和并发编程,旨在...
java concurrency in practice 经典的多线程编程书籍,英文版
其次,"langspec-3.0.pdf"可能指的是Java语言规范第三版,这是Java开发者的重要参考资料。这个文档详细定义了Java语言的所有语法、语义和行为,包括并发部分。在Java语言规范中,你会找到关于线程、对象的内存模型、...
总的来说,《Java Concurrency In Practice》和Guava库为我们提供了丰富的理论知识和实践经验,通过深入学习和实践,我们可以构建出高效、可靠的并发应用程序。在实际工作中,我们需要不断探索、理解和运用这些工具...
《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joe Bowbeer、David Holmes和Doug Lea合著,国内有热心人士进行了中文翻译,使得更多的中国开发者...
以上内容概述了《Java Concurrency In Practice》这本书中所涉及的关键知识点和技术细节,希望能为读者提供有价值的参考和启示。通过深入学习这些内容,开发者可以更好地掌握Java并发编程的基本原理和最佳实践,从而...
本资料集主要探讨的是Java Concurrency相关的知识点,旨在帮助开发者理解和掌握Java平台上的并发编程技术。以下是相关知识点的详细说明: 1. **线程与并发** - **线程**:线程是程序执行的最小单位,一个进程中...
- **书名**:《Java并发实践》(Java Concurrency in Practice) - **作者**:Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea - **出版社**:Addison Wesley Professional - **...
java_concurrency_in_practice.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...