原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对AQS进行分析. AQS设计原理 数据结构 底层是双向链表,队列的一种实现. Sync queue:同步队列,head节点主要负责后面的调度. Condition queue:单向链表,不是必须的的,也可以有多个. 设计原理 使用Node实现FIFO队列,可以用于构建锁或者其他同步装置的基础框架 利…
本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------------------------------------------------------------------------/** *  Scala中最常见的两种数据结构:Map 和 Tuple *   *  Map初步感受就是key,value方式,key即是值的索引,排列非常规按照Hash…
J.U.C实现基础 AQS.非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的.而concurrent包中的高层类又是依赖于这些基础类来实现的.从整体来看,concurrent包的实现示意图如下: Java中的许多可阻塞类,例如ReentrantLock.Semaphore.ReentrantReadWriteLock.CountDownLatch等,都是基于AQS构建的. 注:在jdk 1.8.…
package com.wanji.scala.test import javax.swing.text.AbstractDocument.Content import scala.actors.Actor case class Hello(name:String,content:String,send:Actor) case class HelloBack(name:String,content: String,sender:Actor) /** * 描述:Scala编程实战 * 作者: su…
本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 ------------------------------------------------------------------------------------------------------------------------ /** * 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: * 1.数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop, * …
/** * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言 * 其实真正面向对象的精髓是不是封装.继承.多态呢? * --->肯定不是,封装.继承.多态,只不过是支撑面向对象的 * 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征: * 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身 * ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的 * 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象 * 不会随着它一起挂…
线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线程中的操作执行顺序是不可预测的. Java里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性和有序性.加上复合操作的原子性,我们可以认为Java的线程安全性问题主要关注点有3个:可见性.有序性和原子性. Java内存模型(JMM)解决了可见性和有序性…
原文:慕课网实战·高并发探索(十四):线程池 Executor new Thread的弊端 每次new Thread 新建对象,性能差. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM(out of memory 内存溢出),这种问题的原因不是因为单纯的new一个Thread,而是可能因为程序的bug或者设计上的缺陷导致不断new Thread造成的. 缺少更多功能,如更多执行.定期执行.线程中断. 线程池的好处 重用存在的线程,减少对象创建.消亡的开…
JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性? 我们首先看Random 类及其局限性,如下: 在 JDK7 之前包括现在,java.util.Random 应该是使用比较广泛的随机数生成工具类,另外 java.lang.Math 中的随机数生成也是使用的 java.util.Random 的实例.…
一.概念 Fork/Join就是将一个大任务分解(fork)成许多个独立的小任务,然后多线程并行去处理这些小任务,每个小任务处理完得到结果再进行合并(join)得到最终的结果. 流程:任务继承RecursiveTask,重写compute方法,使用ForkJoinPool的submit提交任务,任务在某个线程中运行,工作任务中的compute方法的代码开始对任务进行分析,如果符合条件就进行任务拆分,拆分成多个子任务,每个子任务进行数据的计算或操作,得到结果返回给上一层任务开启线程进行合并,最终通…