java中的CAS和原子类的实现(JDK1.8)

CAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。 

次时代Java编程(一) Java里的协程

我们先回忆一下线程的定义,操作系统产生一个进程,进程再产生若干个线程`并行`的处理逻辑,线程的切换由操作系统负责调度。传统语言C++ Java等线程其实与操作系统线程是1:1的关系,每个线程都有自己的Stack, Java在64位系统默认Stack大小是1024KB,所以指望一个进程开启上万个线程是不现实的。但是实际上我们也不会这么干,因为起这么多线程并不能充分的利用CPU,大部分线程处于等待状态,CPU也没有这么多核让线程使用。所以一般线程数目都是CPU的核数。

Java的纤程库 - Quasar

最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题:服务 A 是我们开发的系统,它的业务需要调用 B 、 C 、 D 等多个服务,这些服务是通过http的访问提供的。 问题是 B 、 C 、 D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长。幸运地是这些服务都是集群部署的,容错率和并发支持都比较高,所以不担心它

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

自从lambda表达式成为Java语言的一部分之后,Java集合(Collections)API就面临着大幅变化。而 JSR 355(规定了 Java lambda 表达式的标准)的正式启用更是使得 Java 集合 API 变的过时不堪。尽管我们可以从头实现一个新的集合框架(比如“Collection II”),但取代现有的集合框架是一项非常艰难的工作,因为集合接口渗透了 Java 生态系统的每个角落,将它们一一换成新类库需要相当长的时间。

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

Java 8 中的 lambda 为什么要设计成这样?(为什么要一个 lambda 对应一个接口?而不是 Structural Typing?) lambda 和匿名类型的关系是什么?lambda 是匿名对象的语法糖吗? Java 8 是如何对 lambda 进行类型推导的?它的类型推导做到了什么程度? Java 8 为什么要引入默认方法? Java 编译器如何处理 lambda?

Spring Data Neo4j简介

Neo4j是一款非常流行的开源图型NoSQL数据库。它完全支持ACID数据库事务属性,由于其良好的图数据模型设计,Neo4j的速度非常快。对于连接的数据操作,Neo4j的速度要比传统的关系型数据库快1000倍。Spring Data是Spring的一个核心项目,其下涵盖了如Spring Data JPA、Spring Data MongoDB、Spring Data Redis、Spring for Hadoop等子项目,而Spring Data Neo4j也是Spring Data下的一个重要子项目,它提供了高级的特性以将注解的实体类映射到Neo4j图型数据库上。其模板编程模型类似于我们熟知的Spring模板,为与图的交互提供了基础,此外也用于高级的仓库支持。该项目旨在为NoSQL数据库操作提供便捷的支持。