要想进入一线互联网公司,这部分内容必须要会,否则的话,你始终都只能停留在比较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包的更多相关文章

  1. Java 并发工具箱之concurrent包

    概述 java.util.concurrent 包是专为 Java并发编程而设计的包.包下的所有类可以分为如下几大类: locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关 ...

  2. Java并发机制(8)--concurrent包下辅助类的使用

    Java并发编程:concurrent包下辅助类的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920397.html 1.CountDown ...

  3. 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构

    本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...

  4. 并发工具箱 concurrent包的原理分析以及使用

    1.java.util.concurrent 包下的类分类图 locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关,是构建非阻塞算法的基础: executor部分:线程池相 ...

  5. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  6. 线程并发线程安全介绍及java.util.concurrent包下类介绍

    线程Thread,在Java开发中多线程是必不可少的,但是真正能用好的并不多! 首先开启一个线程三种方式 ①new Thread(Runnable).start() ②thread.start(); ...

  7. Java并发(6):concurrent包中的Copy-On-Write容器

    一. concurrent包介绍 在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java ...

  8. Python并发编程-concurrent包

    Python并发编程-concurrent包 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.concurrent.futures包概述 3.2版本引入的模块. 异步并行任务编程 ...

  9. Java并发---concurrent包

    一.包的结构层次 其中包含了两个子包atomic和locks,另外字concurrent下的阻塞队列以及executor,这些就是concurrent包中的精华.而这些类的实现主要是依赖于volati ...

随机推荐

  1. JS实现分页效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Linux学习总结(8)——VMware v12.1.1 专业版以及永久密钥

    VMware v12.1.1 专业版以及永久密钥 热门虚拟机软件VMware Workstation 现已更新至v12.1.1 专业版!12.0属于大型更新,专门为Win10的安装和使用做了优化,支持 ...

  3. xwiki操作手册

    Xwiki官网:http://www.xwikichina.com/xwiki/bin/view/Main/中文官网. 1   用户管理 1.1    添加新用户 用户管理需要管理员权限,管理员登陆后 ...

  4. Linux下redis安装(单机版)

    redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它支持存储的value类型相对更多,包括stri ...

  5. IT运维分析

    http://www.infoq.com/cn/presentations/case-of-it-operation-analysis-and-log-search-analysis-engine?u ...

  6. new方法的实现原理

    // // main.m // 04-new方法的实现原理 #import <Foundation/Foundation.h> #import "Person.h" # ...

  7. HDU 5375 Gray code(DP)

    题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...

  8. Android资源推荐

    Intellj IDEA 安装配置 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程) Android设计指南站点 图标 App Icon Template免费的Photo ...

  9. Android自己定义视图(一):带下划线的TextView

    package com.francis.underlinetextviewtest; import android.content.Context; import android.content.re ...

  10. vue2留言板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...