在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能。一直以来都想写一个Java并发包系列,无奈迟迟没有动手动脑。最近重新思考规划了自己的学习路线,决定从Java并发包开始把每个技术、原理、源码做成一个一个系列,由浅入深,由表及里。
  这是Java并发包的开篇,我将大致介绍从一个较为宏观的角度来窥探Java并发包,以及这个系列的一些大致思路。
  java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户更够更为快捷方便的编写多线程情况下的并发程序。谈到线程安全问题总会免不了几个核心问题:锁、阻塞、原子性、可见性等等。

-java.util.concurrent
-atomic
-locks

  在concurrent包下还有两个子包,一个是atomic这里面放置的是一些原子类,比如在多线程环境下执行i++的操作实际上是i+1再是将结果赋值给i,这里就会涉及到一个线程安全问题,当一个线程正在执行i+1的时候,很有可能另外一个线程正在读取i的值,这个时候就会造成数据不一致,这是原子性问题。即时一个线程完成了i++的操作,而另外一个线程此时来读取i的值也有可能发现i并不是想加后的值,这是可见性问题。atomic里的AtomInteger就能完美解决原子性和可见性问题。
  另一个包是locks,这里面的包可以说是提供了并发包里线程安全的最为基础的工具——显示锁(ReentrantLock、ReadWriteLock)。Java中有synchronized修饰的同步代码块内置锁,但这远远不能满足一些高级特性,例如通过轮询、定时的方式去获得一个锁,并发包中的显示锁的灵活性要高于synchronized,但随之而来的是使用的难度会增加,使用不当则会造成未知的后果。
  concurrent包下就是一些并发工具类,常见的有ConcurrentHashMap、ArrayLinkedQueue、LinkedLinkedQueue……这些都是线程安全的类,根据情况不同选取不同的类。
  在这个系列的是开始我会首先介绍有关线程的一些基础知识以及专业术语,例如:线程与进程、阻塞与非阻塞、线程安全、原子性、可见性等等,有时候可能会“超纲”,超纲部分做简要阐述。接着会从实例出发分门别类的介绍并发包以及源码,源码以jdk1.7为主,有时可能会设计最新的jdk1.8甚至是jdk1.6,这会特殊标明。最后会对Java并发包做一个总结性的概述。
  以上就是Java并发包系列的开篇。如有错误,请留下评论批评指正。

0.Java并发包系列开篇的更多相关文章

  1. Java容器解析系列(0) 开篇

    最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻, ...

  2. Java并发包源码学习系列:CLH同步队列及同步资源获取与释放

    目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQue ...

  3. Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别

    目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放 ...

  4. Java并发包源码学习系列:ReentrantLock可重入独占锁详解

    目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterrupti ...

  5. Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析

    目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...

  6. Java并发包源码学习系列:详解Condition条件队列、signal和await

    目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaite ...

  7. Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析

    目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put ...

  8. Java并发包源码学习系列:阻塞队列BlockingQueue及实现原理分析

    目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBloc ...

  9. Java并发包源码学习系列:阻塞队列实现之ArrayBlockingQueue源码解析

    目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) ...

随机推荐

  1. css grid布局的首次使用

    首先来看一下效果图 接下来废话不多说,先上代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. python之数据结构链表实现方式

    #!/usr/bin/env python # --------------------------------------- # author : Geng Jie # email : gengji ...

  3. 面向对象的三大特征——封装、继承、多态(&常用关键字)

    一.封装 Encapsulation 在面向对象程式设计方法中,封装是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装的概念(针对服务器开发,保护内部,确保服务器不出现问题) 将类的 ...

  4. CF #401 (Div. 2) C.Alyona and Spreadsheet (思维)

    题意:给你n行m列的数组,和k次的询问,问从l行到r行是否存在一个非递增的列 思路:看到这道题的数据量我们就知道直接暴力不可取,所以我们采用了预处理的方法,我们记录下来每一行的最长的非递减的列的开头的 ...

  5. .elf格式内容

    arm-linux-ld 可以将程序链接成我们arm平台下的可运行的程序 以之前使用过的led程序为例: 首先: arm-linux-gcc -g -c led.S (-g是表示产生调试信息, -c是 ...

  6. quartus ii有符号数的问题(待完善)

    1.有符号数是以补码的形式存储的,在modelsim仿真时,补码自动转换为有符号的十进制数. 2.关于截位的问题: 当只取寄存器中的其中m位时,这时候取得的数是按照无符号位来处理的? 3.reg型数据 ...

  7. 移动开发中使用的一些meta头部标签整理

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  8. 回车键搜索 - Enter搜索

    今天写了个 搜索  想来发表发表 <!DOCTYPE html><html lang="en"><head> <meta charset= ...

  9. Coordinator节点

    Coordinator节点 Coordinator 节点主要负责segment 的管理和分配.更具体的说,它同通过配置往historical 节点 load 或者 drop  segment .Coo ...

  10. 计算单词出现的次数--linq

    1.直接给出代码:声明数据,也可以是txt等文件,通过File类的静态方法读取其中的文本,再转换成List<string>数组. private static List<string ...