CAS

并发编程——JUC中的重要组件(atomic、信号量、locks、ConcurrentHashMap、线程安全的集合类)这些你都知道吗?

守給你的承諾、 提交于 2020-08-15 13:27:13
JUC中的重要组件 原子类 java.util.concurrent.atomic java.util.concurrent.locks Callable/Future/FutureTask Semaphore信号量 线程安全的集合类 ConcurrentHashMap(重点) 理解HashMap的put方法的执行过程. 对比HashMap、HashTable、ConcurrentHashMap 原子类 java.util.concurrent.atomic 原子类内部用的是 CAS 实现,所以性能要比加锁实现 i++ 高很多。原子类有以下几个 AtomicBoolean/AtomicInteger/AtomicIntegerArray/AtomicLong/AtomicReference/AtomicStampedReference java.util.concurrent.atomic java.util.concurrent.locks ReentrantLock的加锁和解锁操作是分开的 使用更加灵活 常见方法 tryLock 付过获取锁失败是不会挂起等待的而是直接放弃等待 locklnterruptibly 设置等待锁的过程中是否会被异常中断 如果用户想自己实现锁, 就可以实现这个借口, 进一步开发 所以这个包的主要作用就是让用户实现一些自己定制的锁 java.util

Java架构师鲁班二期

跟風遠走 提交于 2020-08-15 11:31:25
课程介绍〗:课程旨在帮助在职Java开发工程师晋升提高,由来自一线大型 互联网 公司架构师、技术总监全职授课,内容涵盖: 高并发、高可用、分布式、高性能、架构设计、源码分析。〖课程目录〗:openjdk编译调试、java线程模型【回放】openjdk编译调试、java线程模型(7月4日 20:00-22:00) 02Java 当中的"锁"事【回放】Java 当中的"锁"事(7月7日 20:00-22:00) 03synchronized和volatile关键字【回放】synchronized和volatile关键字(7月9日 20:00-22:00) 04并发编程之并发容器【回放】并发编程之并发容器(7月11日 20:00-22:00) 05并发中锁的原理:JOL查看对象布局、各种锁之间的性能对比【回放】并发中锁的原理(7月14日 20:00-22:00) 06JAVA锁膨胀的过程【回放】JAVA锁膨胀的过程(7月16日 20:00-22:00) 07锁的膨胀过程二【回放】锁的膨胀过程二(7月18日 20:00-22:00) 08并发编程之线程池【回放】并发编程之线程池(7月21日 20:00-22:00) 09CAS和AQS的应用和原理之CyclicBarrier-semaphore【回放】CAS和AQS的应用和原理(7月23日 20:00-22:00)

用Redis实现分布式锁--Redis之面试官爱我系列(3)

霸气de小男生 提交于 2020-08-15 09:03:01
大家好我是霜华!!! 我是真的真的想回学校了。 想去图书馆边写代码边看来来往往的小姐姐们。 真就迷迷糊糊的大二就这样过去了。。。。 分布式在如今的大数据高流量的情况下是非常必要有的一个环境 而分布式锁也是重中之重 分布式锁 多个操作同时进行会参数并发问题,因为多个操作不是原子操作 (原子操作:不会被线程调度机制打断的操作,这种机制操作一旦开始就一直运行到结束,中间不会有任何线程切换) 在单机开发中,锁经常见到,简单暴力的synchronize 以及可重入锁ReenttrantLock , 用ReenttrantLock实现单机锁 public class RedisText { private static Integer inventory = 1001 ; //存货 private static final int NUM = 1000 ; //执行次数 private static LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue ( ) ; //单向列表的阻塞队列 static ReentrantLock reentrantLock = new ReentrantLock ( ) ; //重入锁,实现公平锁机制 public static void main ( String [ ] args

我亦云云——也谈云计算(5)

不羁岁月 提交于 2020-08-15 07:31:42
4 云服务与低成本 云服务是把企业 IT 设备及专业管理人员的长期大笔资本开销( CapEx )转为以按需租赁为形式的运营开销( OpEx )。前面我们讨论过 IT 硬件设备更新过期速度越来越快,专业 IT 管理人员更是越来越稀缺资源。所以云服务的低成本特性从用户的角度来讲不言自明。这一节我们主要从后端数据中心的角度来讲云服务的低成本特性。 当我们考虑成本的时候,需要考虑硬件成本,管理成本和使用成本。硬件成本主要是指购置硬件所需要的费用,包括服务器,存储系统,网络设备,等等。人们往往会很直观地考虑硬件成本而忽视管理成本和使用成本。其实在大型数据中心,存储系统的管理、使用成本远远超过(可以数十倍于)硬件成本。 先来看管理成本方面。信息生命周期管理认为信息存在生命周期的不同阶段,包括产生、读取、更改、迁移、存档、回收等等。通过实现信息生命周期管理来帮助用户在信息的各个不同阶段以最低的成本获得最大的价值一直是工业界关注的一个问题。 EMC 是工业界重要的推动力量之一。 CEO Joe Tucci 早在 2003 年就认为信息生命周期管理是存储界的一次重要革新。实际上,将信息生命周期管理和云计算结合起来也能有效地降低管理成本。比如,在信息产生的初期,信息的价值相对较高。一个典型的例子是用户一般会频繁地访问最近收到的电子邮件。随着时间的流逝,该信息的价值越来越低。此时可以将该信息迁移到低速

Github开源项目(企业信息化基础平台)

久未见 提交于 2020-08-15 06:25:42
JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化)、SCM(供应链系统)、ERP(企业资源管理系统)、CMS(内容管理系统)、CRM(客户关系管理系统)等企业系统的通用业务功能。Github链接: https://github.com/u014427391/jeeplatform 欢迎下载或者star(收藏) JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,基于本平台可以实现快速开发,实现企业信息管理的高效、高性能开发。系统追求安全、性能方面的有效实现。 系统设计 系统管理(模块名称jeeplatform-admin) 管理系统登录页面,采用Shiro登录验证 管理系统主页前端,可以适配移动端页面 管理系统主页采用开源前端模板,具有换肤功能 管理系统主页,获取用户具有的权限,显示菜单 角色进行授权,只有超级管理员才具有权限 角色进行配置,可以学习一下RBAC(基于角色的权限控制) 使用JavaEmail插件实现邮件发送,记得需要开启SSl验证 OA管理系统(待开发) CMS管理系统(待开发) 系统升级 单点登录基础(模块名称jeeplatform-sso)(开发中

3 MySQL中的锁与调优

不问归期 提交于 2020-08-15 06:21:51
MySQL锁与调优 1 锁的分类 MySQL数据库的锁分为 表级锁和行级锁 。从数据库的角度看,行级锁又可以分为 独占锁(排它锁)和共享锁 。 2 共享锁 共享锁,也叫S锁(Shared Lock); 共享锁顾名思义,那就是其锁定的资源可以被其它用户 读取 ,但其它用户 不能修改 (其他用户可以读,但不能修改) ; 如果在select查询语句中要手动加入共享锁,那么对应的SQL语句为: select ... lock in share mode; 3 独占锁(排他锁) 独占锁(排他锁),也称X锁(Exclusive Lock); 独占锁锁定的资源 只允许进行锁定操作的程序使用 ,其它任何对它的操作均不会被接受 ; 执行数据更新命令, 即INSERT、UPDATE 或DELETE 命令时,MySQL会自动使用独占锁; 但当对象上有其它锁存在时,无法对其加独占锁。独占锁一直到事务结束才能被释放 ; 在select命令中使用独占锁的SQL语句为: select … for update; 这里需要注意: 一个事务在一行数据上加入了 独占锁 ,那么其余事务不可以在该数据行上加入任何锁, 也就是说加过排他锁的数据行在其他事务中是不能修改数据的,也不能通过 for update和lock in share mode锁 的方式查询数据, 但 可以直接通过select ...from...查询数据

Java并发编程:volatile关键字解析

送分小仙女□ 提交于 2020-08-15 04:50:33
Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。   以下是本文的目录大纲:   一.内存模型的相关概念   二.并发编程中的三个概念   三.Java内存模型   四..深入剖析volatile关键字   五.使用volatile关键字的场景   若有不正之处请多多谅解,并欢迎批评指正。   请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com/dolphin0520/p/3920373.html 一.内存模型的相关概念   大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题

构建高性能队列,你不得不知道的底层知识!

不想你离开。 提交于 2020-08-15 01:53:22
前言 本文收录于专辑: http://dwz.win/HjK ,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列,可以说是除了数组和链表之外最基础的数据结构了,在很多场景中都有用到,后面我们也会陆陆续续的看到。 今天,我想介绍一下,在Java中,如何构建一个高性能的队列,以及我们需要掌握的底层知识。 学习其他语言的同学,也可以看看,在你的语言中,是如何构建高性能队列的。 队列 队列,是一种先进先出(First In First Out,FIFO)的数据结构,类似于实际生活场景中的排队,先到的人先得。 使用数组和链表实现简单的队列,我们前面都介绍过了,这里就不再赘述了,有兴趣的同学可以点击以下链接查看: 重温四大基础数据结构:数组、链表、队列和栈 今天我们主要来学习如何实现高性能的队列。 说起高性能的队列,当然是说在高并发环境下也能够工作得很好的队列,这里的很好主要是指两个方面:并发安全、性能好。 并发安全的队列 在Java中,默认地,也自带了一些并发安全的队列: 队列 有界性 锁 数据结构 ArrayBlockingQueue 有界 加锁 数组 LinkedBlockingQueue 可选有界 加锁 链表 ConcurrentLinkedQueue 无界 无锁 链表

Java中atomic包中的原子操作类总结

百般思念 提交于 2020-08-14 22:57:20
原创文章&经验总结&从校招到A厂一路阳光一路沧桑 详情请戳 www.codercc.com 关键内容总结: 无锁操作是使用CAS(compare and swap)又叫做比较交换来鉴别线程是否出现冲突, 出现冲突就重试当前操作直到没有冲突为止 。 CAS的实现需要硬件指令集的支撑 ,在JDK1.5后虚拟机才可以使用处理器提供的CMPXCHG指令实现。 image 1. 原子操作类介绍 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的( 关于synchronized可以看这篇文章 )。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在J.U.C下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。atomic包下的这些类都是采用的是乐观锁策略去原子更新数据,在java中则是使用CAS操作具体实现。 2. 预备知识--CAS操作 能够弄懂atomic包下这些原子操作类的实现原理,就要先明白什么是CAS操作。 什么是CAS? 使用锁时,线程获取锁是一种悲观锁策略

JUC—两万字的atomic原子类源码深度解析

不羁岁月 提交于 2020-08-14 18:24:58
  基于JDK1.8详细介绍了JUC下面的atomic子包中的大部分原子类的底层源码实现,比如AtomicInteger、AtomicIntegerArray、AtomicStampedReference等原子类源码。最后还介绍了JDK1.8对原子类的增强,比如LongAdder和LongAccumulator的原理! 文章目录 1 atomic的概述 2 原子更新单个变量 2.1 基本原子类 2.1.1 重要属性 2.1.2 重要方法 2.2 带版本号的原子类 2.2.1 重要属性 2.2.2 重要方法 2.2.3 案例 3 原子更新数组 3.1 重要属性 3.2 重要方法 4 原子更新字段属性 5 原子类的加强 5.1 LongAdder 5.1.1 LongAdder的概述 5.1.2 LongAdder的原理 5.1.2.1 内部结构 5.1.2.2 add增加给定值 5.1.2.2.1 longAccumulate统一处理 5.1.2.3 increment自增 5.1.2.4 sum统计 5.1.2.5 reset重置 5.1.2.6 sumThenReset统计并重置 5.2 LongAccumulator 5.2.1 LongAccumulator的概述 5.2.2 LongAccumulator的原理 5.2.2.1 内部结构 5.2.2.2