并发知识与concurrent包
来源:互联网 发布:淮阴师范学院网络课程 编辑:程序博客网 时间:2024/04/29 01:24
要想进入一线互联网公司,这部分内容必须要会,否则的话,你始终都只能停留在比较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包
- concurrent并发包结构
- JDK并发包(concurrent)
- JDK并发包(concurrent)
- JDK并发包(concurrent)
- JDK并发包(concurrent)
- java并发包concurrent
- java 并发 concurrent 包
- java并发编程concurrent包
- ConCurrent并发包 - Lock详解
- 并发(Concurrent)与并行(Parallel)
- 并发(Concurrent)与并行(Parallel)
- java并发包concurrent多线程示例
- java jdk5支持的并发包concurrent
- java.util.concurrent并发包一览
- Java并发包concurrent之CountDownLatch
- (java多线程并发)concurrent包的实现
- jQuery中each的用法之退出循环和结束本次循环
- 向数组中输入字符串的三种方法
- 排序算法之初级排序
- 编码(2):unicode和utf-8
- android 自定义view属性
- 并发知识与concurrent包
- 【BZOJ】4717 改装
- 播放一个数组中的动画
- DES 加密 解密算法
- 图标的旋转动画
- CNN反向传播公式推导
- win7装linux双系统
- 变量提升/函数提升
- 十四周项目三 折腾二维数组