并发知识与concurrent包
要想进入一线互联网公司,这部分内容必须要会,否则的话,你始终都只能停留在比较low的段位。
关于并发知识,最重要的两个概念一定要搞清楚,那就是可见性和原子性。其中可见性与前面提到的volatile关键字是息息相关的,可见性只是并发领域里的一个概念,而volatile则是Java语言中,实实在在保证变量可见性的关键字。
前面说了,要弄清楚可见性,就需要搞清楚主存和工作内存。关于主存和工作内存,其实又属于JVM的知识范畴。所以从这里就可以看出来,知识都是有关联性的。
原子性其实相对于可见性来说,反倒更好理解一些,相信那个万年不变的银行汇款的关于事务的例子,就足以大部分人理解原子性这个概念了,它其实就是一个或多个操作,被视作一个整体的意思。
有了并发的基础知识以后,你就需要研究一下concurrent包了。这里面的东西其实是一个宝藏,一旦你需要写并发相关的功能,你会发现这里面的东西非常实用。
其中ConcurrentHashMap是面试最容易被问到的一个类,几乎所有的面试都会问你,ConcurrentHashMap和普通的同步HashMap有什么区别。
这个问题其实需要你知道两个知识就可以了,一个是HashMap的数据结构,一个是锁分段的技术,具体的LZ这里就不解释了,大家自己下去找相关资料看吧。
此外,concurrent包里有一个非常重要的类,叫做AbstractQueuedSynchronizer,几乎所有的concurrent包内的并发工具类,都是基于这个抽象类扩展出来的。因此,把AbstractQueuedSynchronizer这个类研究透彻,非常有助于你理解concurrent包。
最后一点,面试的时候还经常会被问到的一个问题,就是ReentrantLock和synchronized关键字有什么区别。
记得LZ之前组织过的YY面试活动里,LZ问过很多次这个问题,但几乎所有人都答不出来。这只能说明一个问题,那就是大部分人在用synchronized和ReentrantLock的时候,并不会考虑这两者到底用哪个好一些。
其实它们的区别很简单,简单的说,就是synchronized由于是底层JVM实现的互斥,因此效率会高一些。而ReentrantLock的功能则比synchronized更多,比如定时获取某个锁,多个等待条件等。
并发这一部分是一个程序员进阶的重要部分,希望所有Java程序员都可以重视这一部分。
并发知识与concurrent包的更多相关文章
- Java 并发工具箱之concurrent包
概述 java.util.concurrent 包是专为 Java并发编程而设计的包.包下的所有类可以分为如下几大类: locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关 ...
- Java并发机制(8)--concurrent包下辅助类的使用
Java并发编程:concurrent包下辅助类的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920397.html 1.CountDown ...
- 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构
本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...
- 并发工具箱 concurrent包的原理分析以及使用
1.java.util.concurrent 包下的类分类图 locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关,是构建非阻塞算法的基础: executor部分:线程池相 ...
- 高并发编程基础(java.util.concurrent包常见类基础)
JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...
- 线程并发线程安全介绍及java.util.concurrent包下类介绍
线程Thread,在Java开发中多线程是必不可少的,但是真正能用好的并不多! 首先开启一个线程三种方式 ①new Thread(Runnable).start() ②thread.start(); ...
- Java并发(6):concurrent包中的Copy-On-Write容器
一. concurrent包介绍 在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java ...
- Python并发编程-concurrent包
Python并发编程-concurrent包 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.concurrent.futures包概述 3.2版本引入的模块. 异步并行任务编程 ...
- Java并发---concurrent包
一.包的结构层次 其中包含了两个子包atomic和locks,另外字concurrent下的阻塞队列以及executor,这些就是concurrent包中的精华.而这些类的实现主要是依赖于volati ...
随机推荐
- windows下搭建hadoop-2.6.0本地idea开发环境
概述 本文记录windows下hadoop本地开发环境的搭建: OS:windows hadoop执行模式:独立模式 安装包结构: Hadoop-2.6.0-Windows.zip - cygwinI ...
- 修正单纯形法·优化算法实现·Java
修正单纯性法 代码例如以下: 舍去了输入转化的内容,主要包括算法关键步骤. public class LPSimplexM { private static final double inf = 1e ...
- 分享一个css3学习使用的选择器手册
http://www.haorooms.com/tools/css_selecter/
- 亲测有效的解决在vue cli@3 create 命令执行后 node-sass无法安装上的问题
在使用Vue cli@3 搭建工程手脚架的过程中.当我们选择了采用 sass 处理 css 编译.在使用vue create test 命令行执行到最后.会到以下这步:然后开始报错: Download ...
- 韦东山ARM裸机笔记(1)
1.一个嵌入式Linux系统的软件组成:单片机大全Bootloader-->Linux驱动-->Linux APP-->Linux GUI(Android/QT) 2.驱动程序=软件 ...
- Linux 内建命令和系统命令
shell内建命令是指bash(或其它版本)工具集中的命令.一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿.当在bash中键入 ...
- logwatch日志监控
1. 介绍 在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态. 如登陆历史.邮件.软件安装等日志.系统管理员一个个去检查会十分不方便:且大多时候,这会是一种被动的检查 ...
- IntelliJ IDEA如何导入maven结构的web工程
第一步:打开一个现有(也可以不打开,直接用import选择Maven类型)的IntelliJ IDEA工程,点击菜单的"File"->"new"-> ...
- 怎样从Cortex-m向STM32移植使用SPI接口协议
/*************************************************************************************************** ...
- regular-第一课(正则表达式基础)
之前一直听说正则表达式,尤其是在学习java的时候,遇到了不少关于正则表达式的用法.例如一个输入框,你可以使用正则表达式限制输入的内容.当然,在android以后,正则表达式就几乎没有怎么用了.不过呢 ...