Java并发总结-全景图-程序员宅基地

Java并发总结-全景图

Java并发编程知识总结——开篇词

这篇博客是开始总结Java并发的开篇,主要说下下面总结Java并发编程相关知识的思路、呈现出自己理解的Java并发知识的全景图,为后面Java并发知识总结的复习提供线索和记忆脉络。主要学习和借鉴的主要资料有:《极客时间》并发编程专栏、《Java并发实战》等。

Java并发编程总结思路

  • 之前有粗有细的看了一遍《Java并发实战》,看完后过段时间又全部忘记了;究其原因,是因为没有看到Java并发的全局,只看到了局部零散的知识点,记住的是点,难有线和面。因此需要从一个个单一的知识和技术中“跳出来”,建立一张全景图。
  • 并发编程领域主要可以抽象成三个核心问题:分工、同步、互斥
  1. 分工:

    在多核处理器时代,利用多核处理优势,将一个大的任务拆解成一个个小任务分工去完成提高效率。比如要建一条马路,划分成不同的任务:打地基、铺路、铺砖、土建等不同的子任务、分工去完成,提供了工作的效率(性能)。抽象到Java并发上,比如:生产者-消费者模式、Fork/Join、Future(同异步分工协同)等。

  2. 同步(协作):

    在分工的基础上,子任务之间可能存在依赖关系,比如在造路过程中,土建完成之后需要通知铺路小组去完成铺路,这就是子任务之间的同步。

    像这类问题抽象到Java并发上就是:一个线程执行完成了一个任务、如何通知执行后续任务的线程开工的问题。Java提供的Future、同步工具类(CountDownLatch、Notify机制、栏栅CyclicBarrier)等都是解决同步问题的工具。

    工作中遇到的线程协作问题,基本可以描述成:当某个条件不满足时,线程需要等待,当某个条件满足时,线程需要被唤醒执行

  3. 互斥(安全性):

    分工、同步主要强调的是性能,而并发程序里还有一部分关于正确性的的问题,叫“线程安全”

    并发程序里多个线程同时访问同一个共享变量的时候,结果是不确定的。不确定意味着可能正确,也可能错误,事先是不不确定的。而不确定的主要源头是可见性问题有序性问题、和原子性问题。为了解决这三个问题,Java语言引入内存模型,内存模型提供了一系列的规则,利用这些规则,可以避免可见性问题、有序性问题,但还是不足以完全解决线程安全问题。解决线程安全问题的核心方案还是互斥。

    互斥,指同一时刻,只允许一个线程访问共享变量

    互斥的核心就是锁,Java中的synchronized、SDK里的各种Lock都能解决互斥问题。虽说锁解决了安全问题,但同时也带来了性能问题,如何保证安全性的同时有能尽可能提高性能呢?

    可以分场景优化,Java SDK里提供ReadWriteLock、StampedLock就可以优化读多写少场景下的锁性能。当然还可以使用无锁的数据结构,例如Java SDK里提供的原子类都是基于无锁技术实现的。

    除此之外,还有一些其他的方案,原理是不共享变量或者变量只允许读。这方面,Java提供了ThreadLocal和final关键字,还有一种Copy-on-write模式。

Java并发编程全景图

  • 主要根据《极客时间》并发编程专栏的全景图的基础上加上自己的理解补充完善出来的。后面总结主要会围绕全景图的脉络并以全景图的部分和一个标题分支来命名博客标题。这样我觉得会更方便记忆和查找。

  • 后面全景图会根据反复阅读《并发编程实战》来补充更新完善。

  • 全景图:
    1439234-20190411233744211-325202947.png

  • 基本概念图:
    1439234-20190411233941862-1692003992.png

  • 并发工具图
    1439234-20190411234206097-1391485319.png

(图片不知道能不能看清楚,思维导图附件我会放到我的博客后台根目录下的xmind目录下)。

posted @ 2019-04-11 23:41 笨笨的阿龙索 阅读( ...) 评论( ...) 编辑 收藏
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aiwuzhiling/article/details/90105145

智能推荐

CDH5.15.2替换JDK1.7到1.8_cdh jdk1.7-程序员宅基地

文章浏览阅读561次。一、实现功能CDH5.15.2安装过程中默认是jdk1.7,但是很多程序是jdk1.8开发的,所以,还是替换jdk1.8方便一些。二、实现步骤1.自定义安装JDK,并配置环境变量/etc/profile。默认已会,否则参考:https://blog.csdn.net/u010886217/article/details/834793802.通过cm关闭所有服务3.命令行关..._cdh jdk1.7

Python网络爬虫与信息提取——网络爬虫Scrapy框架_网络爬虫与信息提取 目录-程序员宅基地

文章浏览阅读2.1k次,点赞7次,收藏40次。第四章 网络爬虫之Scrapy框架● Scrapy爬虫框架Scrapy爬虫框架介绍Scrapy爬虫框架解析requests库和Scrapy爬虫比较Scrapy爬虫常用命令● Scrapy爬虫基本使用● Scrapy爬虫实例..._网络爬虫与信息提取 目录

select2的基本用法 allowClear-程序员宅基地

文章浏览阅读3.4k次。select2的基本用法公司有个项目需要用到类似百度搜索功能的下拉框,自然想到使用select2。先看下select2的效果图,如下:下来简单介绍下这个控件的基本用法,主要简单介绍下远程加载数据;1.首先引入需要的文件:select2.full.js、select2.min.css(4.0.1版本)和jquery.1.8.3及以上.2.远程加载数据示例 1 2 3 4 5 6 7 8 9 10 _allowclear

解决el-table设置固定高度后,展示不同列时表格高度变小bug_el-table高度问题-程序员宅基地

文章浏览阅读572次。究其原因可知是el-table列动态发生变化后,el-table__body-wrapper的高度变小了。在更新表格数据后对el-table进行重载。_el-table高度问题

使用 ggsci 包中的 `scale_color_uchicago` 函数指定可视化图像的配色符合芝加哥大学配色要求(R语言)_uchicago配色-程序员宅基地

文章浏览阅读55次。函数来指定可视化图像的配色方案符合芝加哥大学的配色要求。你可以按照示例代码中的步骤,在自己的 R 代码中应用这些函数,以创建美观且专业的数据可视化图像。函数将会为图像中的颜色映射使用芝加哥大学的配色方案。在数据可视化中,选择适合的配色方案可以提升图像的可读性和美观性。包中的函数,你可以轻松地为你的数据可视化图像选择合适的配色方案,以满足特定的需求。运行上述代码后,你将会看到散点图中的颜色已经根据芝加哥大学的配色方案进行了调整。包中的函数来指定特定的配色方案。函数来指定图像的配色方案。_uchicago配色

 python 快速安装模块包--pip install -i http://pypi.douban.com/simple/ 替换名 --trusted-host pypi.douban.com_pip -i http-程序员宅基地

文章浏览阅读6.1k次。python 快速安装模块包pip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多pip install -i http://pypi.douban.com/simple/ sayhi --trusted-host pypi.douban.com #sayhi是模块名软件一般会被自动安装你python安装目录的这个子目录里 /your_python_install_path/3.6/lib/python3._pip -i http

随便推点

TypeError: non_max_suppression() got an unexpected keyword argument 'score_threshold'_typeerror: got an unexpected keyword argument 'sco-程序员宅基地

文章浏览阅读1.6k次。在使用TensorFlow 的Object Detection中,使用 TensorFlow 1.8及以下环境会报错如下:TypeError: non_max_suppression() got an unexpected keyword argument 'score_threshold'解决方法:升级TensorFlow到1.9及以上1.github参考..._typeerror: got an unexpected keyword argument 'score

WIN提权补丁提权,at,sc,psexes提权_怎么根据补丁号提权-程序员宅基地

文章浏览阅读1.1k次。win提权分为web和本地提权web提权就是getshell后,权限是网站权限,要进行提权本地提权是本地用户进行提权本地用户的权限大于网站权限,所以本地提权成功概率比web提权概率大因为我们做渗透测试,一般都是从网站入侵。所以大部分都是web提权。而本地提权一般运用在内网中。_怎么根据补丁号提权

Vagrant上运行SITL-程序员宅基地

文章浏览阅读41次。打算给Tower加个手机遥控的功能,用运行于vagrant sitl来联合调试,在公司的网络条件很好的情况下没出任何错,都是根据http://ardupilot.org/dev/docs/setting-up-sitl-using-vagrant.html运行,但家里就不行,先是vagrant的box下载不下来,然后是ubuntu的apt源还是官方的,太慢,接着就是pip2也不行,在此把解决的方案..._sitlno such file or directory

【JS基础】类型转换——不同数据类型比较-程序员宅基地

文章浏览阅读311次。小试牛刀  输出下列数据比较结果  有没有全对呢?If the answer is "yes", congratulations!两个不同类型数据比较时隐式转换规则  1) 数字和字符串、布尔类型、数组进行比较时,字符串(或布尔类型、或数组)先转换为数字(Number),再进行比较;数组转数字请参看后文。  使用 if(num) ..._前端不同数据类型比较

NORDIC52832 TWI(I2C) 特点 (3)驱动DA217_nsa_reg_engineering_mode-程序员宅基地

文章浏览阅读2.1k次,点赞5次,收藏15次。mir3da.c#include "da217.h"#include "bn_twi.h"#include "nrf_delay.h"/*******************************************************************************Macro definitions - Register define for Gsensor asic********************************************.._nsa_reg_engineering_mode

建模师是如何用maya软件把美女制作的这么真实的_喜欢美女建模 用什么软件-程序员宅基地

文章浏览阅读390次。1、软件用到了Maya、Zbrush、MR、PS先来看最终图(如果想更多了解游戏建模可以加小编游戏建模企鹅交流社团:1046777540,还可以领取免费的教程哦)2、看看白模图3、角色打底在zb中完成,之后导出建模在maya中布光与渲染。4、毛衣用到了3s材质。毛发用的是Nhair。5、眉毛在zb中雕刻而成6、导入到Maya渲染。效果美美哒。7、头发神奇zb中的fibers,如果不做动画,真的没有可以匹敌的了。平面设计足够了。8、看这头发调整的方._喜欢美女建模 用什么软件

推荐文章

热门文章

相关标签