0.Java并发包系列开篇
在我们想要谈论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并发包系列开篇的更多相关文章
- Java容器解析系列(0) 开篇
最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻, ...
- Java并发包源码学习系列:CLH同步队列及同步资源获取与释放
目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQue ...
- Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放 ...
- Java并发包源码学习系列:ReentrantLock可重入独占锁详解
目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterrupti ...
- Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...
- Java并发包源码学习系列:详解Condition条件队列、signal和await
目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaite ...
- Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析
目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put ...
- Java并发包源码学习系列:阻塞队列BlockingQueue及实现原理分析
目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBloc ...
- Java并发包源码学习系列:阻塞队列实现之ArrayBlockingQueue源码解析
目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) ...
随机推荐
- cent os 直接访问谷歌的脚本实现
https://github.com/DingGuodong/GoogleHostsFileForLinux/blob/master/replaceLocalHostsFileAgainstGfw.s ...
- centos 6.5 搭建JSP运行环境
一.安装nginx yum install nginx #安装nginx,根据提示,输入Y安装即可成功安装 service nginx start #启动 chkconfig nginx on #设为 ...
- Java对象的内存模型(一)
前言 新人一枚,刚刚入门编程不久,各方面都在学习当中,博文有什么错误的地方,希望我们可以多多交流! 最近,在开发App后台过程中,需要将项目部署到云服务器上.而云服务器的内存大小却只有1G.要如何做到 ...
- TensorFlow 安装详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 『不要把手段当成目标 — <一个瑜伽行者的自传>』 本文提纲 1. 机器学习 2 ...
- POPTEST老李谈Debug和Release的区别(c#)2
二.哪些情况下 Release 版会出错 有了上面的介绍,我们再来逐个对照这些选项看看 Release 版错误是怎样产生的 1. Runtime Library: 2. 优化:这类错误主要有以下几种: ...
- AES算法,DES算法,RSA算法JAVA实现
1 AES算法 1.1 算法描述 1.1.1 设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...
- YARN学习总结
YARN学习总结 前言 YARN(Yet Another Resource Manage,另一种资源协调者)是hadoop-0.23版本引入的的一个新的特性,可以说它是对原有Hadoop Mapred ...
- 海康/大华 IpCamera RTSP地址和格式
海康:rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明:username: 用户名.例如 ...
- C#处理JSON 数据
网络中数据传输经常是xml或者json,现在做的一个项目之前调其他系统接口都是返回的xml格式,刚刚遇到一个返回json格式数据的接口,通过例子由易到难总结一下处理过程,希望能帮到和我一样开始不会的朋 ...
- 【转】JDBC学习笔记(3)——复习和练习
转自:http://www.cnblogs.com/ysw-go/ 复习部分 一.获取数据库连接 1)方式一 1 // 获取数据库连接 2 @Test 3 public void testGetCon ...