`
Davidlwq
  • 浏览: 47513 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java concurrency学习

    博客分类:
  • java
阅读更多

今天看了下java官网上关于concurrency库的教程,了解了下基本知识,在此记录下。

 

线程池

concurrency库中最重要的概念当然是线程池,java中线程池是封闭在Executor接口的实现中的。当我们想执行新的线程中,传统的方法是

 

new Thread(r).start()

 

 但线程的创建与销毁会造成一定的资源与时间的消耗,设想一下在一个web服务器,如果对每一个新进来的请求都创建一个线程来处理,这样当线程一多,其调试、创建及其本身占用的资源会很严重,甚至有可能导致系统崩溃,利用线程池来管理线程则可以避免这种结果。

 

在java concurrency中提供了新的接口来供用户执行线程,主要包括如下三个:

Executor

ExecutorService

ScheduledExecutorService

 

而线程池则被封闭在这三个接口的实现里,根据这三个接口提供的不同的工厂方法可以创建不同的线程池。

Executor提供了一个execute方法来执行一个Runnable对象;ExecutorService则在此基础上提供了submit方法,此方法返回一个Future对象,用以监控线程状态并获得线程执行的结果;ScheduledExecutorService则提供了scheduleAtFixedRate等方法来重复执行某一个任务。

 

其它

除线程池之外还扩充了集合框架如BlockingQueue,ConcurrentMap等 ,并提供了Lock类来显示地添加锁。另外一个有趣的是其提供的原子变量。

假设我们有一个Counter类,为了保证其线程间同步,我们一般会这样写

 

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);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }

}

 至于其它高级的特性如Fork/Join框架等,可以参考其它的资料。

0
10
分享到:
评论

相关推荐

    Java Concurrency in Practice.zip

    《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和Doug Lea等专家共同编写。这本书深入探讨了Java平台上的多线程和并发编程,旨在...

    Java Concurrency In Practice Learning Note

    总的来说,《Java Concurrency In Practice》和Guava库为我们提供了丰富的理论知识和实践经验,通过深入学习和实践,我们可以构建出高效、可靠的并发应用程序。在实际工作中,我们需要不断探索、理解和运用这些工具...

    Java Concurrency in Practice中文版

    《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joe Bowbeer、David Holmes和Doug Lea合著,国内有热心人士进行了中文翻译,使得更多的中国开发者...

    Java Concurrency In Practice.pdf

    ### Java并发实践——核心知识点概览 #### 一、引言 《Java Concurrency In Practice...通过深入学习这些内容,开发者可以更好地掌握Java并发编程的基本原理和最佳实践,从而构建出高效、稳定且易于维护的多线程应用。

    Concurrent_Programming+Java Concurrency in Practice+langspec

    首先,"Java Concurrency in Practice"是Java并发编程的经典之作,由Brian Goetz、Tim Peierls、Joshua Bloch、David Holmes和Doug Lea合著。这本书提供了一套实用的指导原则、设计模式和最佳实践,帮助Java开发者...

    Java Concurrency in Practice电子书PDF加源码包

    java_concurrency_in_practice.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.英文原版.pdf

    因此,《Java并发编程实践》不仅适用于高级用户,也适合所有Java开发者阅读学习。 #### 专业知识点 ##### 1. 并发基础 - **并发与并行**:并发是指多个任务同时发生,而并行是指这些任务实际上同时执行。理解这...

    Java Concurrency Framework 的介绍

    ### Java Concurrency Framework 的介绍 #### 一、概述 本文档由 David Holmes 撰写,旨在为初学者提供一个关于 Java Concurrency Framework 的简单介绍。对于那些希望快速掌握 Java 并发编程基础概念的学习者来说...

    Java_Concurrency_In_Practicehtm&&pdf版

    学习java多线程必读之书。书中列举多种多线程编程的反模式,并深入讲解了JDK5中current库的用法,堪称经典!Java Concurrency In Practice PDF版本和htm版。正规PDF版本的

    java_concurrency_in_practice_source源代码

    这里的"java_concurrency_in_practice_source"源代码正是书中实例的实现,它涵盖了Java多线程编程中的关键概念和技术。 1. **线程基础**:Java中创建线程有两种方式,一是通过`Thread`类的子类,二是实现`Runnable`...

    Java Concurrency in Practice

    《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、David Holmes和Doug Lea等多位Java并发领域的专家共同编写。这本书深入浅出地讲解了Java编程中的多...

    深入浅出Java_Concurrency

    ### 深入浅出Java_Concurrency #### J.U.C的整体认识 Java的并发编程模型在J.U.C(`java.util.concurrent`)包中得到了全面的展现,这不仅仅是Java语言本身的一大亮点,更是多线程编程领域的重要组成部分。本文...

    《Java并发编程之美》学习笔记 《Java concurrency programming》learning note.zip

    《Java并发编程之美》学习笔记 《Java concurrency programming》learning note

    Java Concurrency in Practice CHM版本

    通过学习《Java Concurrency in Practice》,开发者能够对Java并发编程有全面而深入的理解,从而编写出高效、稳定且易于维护的并发程序。这本书的CHM版本包含了丰富的示例和实践经验,是Java并发编程领域的宝贵资源...

    《Java Concurrency in Practice》源码

    通过对《Java Concurrency in Practice》的源码进行学习和分析,我们可以深入理解Java并发编程的核心原理,提升在实际项目中处理并发问题的能力。同时,这也有助于我们更好地利用Java提供的并发工具和框架,编写出...

    java concurrency

    结合`java-concurrency-core-learning`这个文件名,我们可以推测这可能是一个关于Java并发核心概念的学习资料。学习这个主题,你可以深入理解Java并发编程的原理,包括线程安全的数据结构、锁机制、并发容器如...

    Java Concurrency.chm

    通过阅读和学习《Java Concurrency.chm》这份资料,开发者能够掌握Java并发编程的基本原理、工具和最佳实践,从而在实际项目中编写出高效、可靠的并发代码。无论是对于提升个人技能,还是解决复杂的并发问题,这本书...

Global site tag (gtag.js) - Google Analytics