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) ...
随机推荐
- 第三方登录 ----QQ登录
学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博文分享!
- inux的进程-进程的概念和fork创建进程
一. 什么是进程? 初学者,可能认为程序或者一段代码就是一个进程.其实这样说是很不全面的,进程简单的说就是一个个条件. 1.需要一个代码 2.需要运行这个代码环境和资源 从下面的一段代码,我们来分析 ...
- spring boot访问数据库
1. Spring JAP 基本使用说明: Spring boot 访问数据库基本上都是通过Spring JPA封装的Bean作为API的,Spring JPA 将访问数据库通过封装,只要你的类实现了 ...
- Linux之shell编程条件判断-if,while,for,case
if 语法格式 if condition then statements [elif condition then statements] [else statements ] fi 示例 vi if ...
- (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)
ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...
- 服务器上的Git
前面的话 如果想与他人使用,除了使用Git来完成日常工作之外,还需要一个远程的Git仓库.尽管从技术上可以从个人的仓库里推送和拉取修改内容,但并不鼓励这样做,因为一不留心就很容易弄混其他人的进度.因此 ...
- 拍照、本地图片工具类(兼容至Android7.0)
拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...
- Zepto 添加手势判断拓展方法(思路+原理)
一.前言 这几个月事情比较多,写了一些博客都没有来得及整理发布,今天刚好有一位同事在开发前端页面的时候用到了手势判断.所以翻出了之前写的 demo,顺便整理一下作为记录. 手势判断在各种应用中都十分常 ...
- Android 代码库(自定义一套 Dialog通用提示框 )
做Android开发五年了,期间做做停停(去做后台开发,服务器管理),当回来做Android的时候,发现很生疏,好些控件以前写得很顺手,现在好像忘记些什么了,总要打开这个项目,打开那个项目 ...
- openssl命令行-证书认证
命令1: openssl genrsa -out root.key 1024 产生一个root.key的私钥 命令2: openssl req -key root.key -new -out ro ...