分类 Java 中的文章

Java 并发之 Double Check

在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初 始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码。 1 2 3 4 5 6 7 8 9 public class UnsafeLazyInitialization{ private static……

阅读全文

深入理解RPC(二)

RMI(Remote Method Interface)远程方法调用与 RPC(Remote Procedure Call)远程过程调用有什么区别呢? 1. 什么是 RMI? RMI,远程方法调用(Remote Method Invocation)是 Enterprise JavaBeans 的支柱,是建立分布式 Java 应用程序的方便途径。RMI 是非常容易使用的,但是它非常的强大。 与……

阅读全文

深入理解RPC(一)

1. 从多态说起 面向对象有三大特征:继承、封装、多态,我们先来说说多态。 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,……

阅读全文

对Spring IOC的理解

1. IOC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 用图例说明一下,传统程序设计如图1-1,都是主动去创建相关对象然后再组合起来:……

阅读全文

Java8 的时间 API

概述 Java8 一个新增的重要特性就是引入了新的时间和日期 API,它们被包含在java.time 包中。借助新的时间和日期 API 可以以更简洁的方法处理时间和日期。 在Java8 之前,所有关于时间和日期的API都存在各种使用方面的缺陷,主要有: Java 的java.util.Date和java.util.C……

阅读全文

Java8 的 Stream API

为什么需要 Stream Stream 作为 Java8 的一大亮点,它与java.io包里的InputStream和OutputStream是完全不同的概念。Java8 中的Stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。Stream API 借助于同样新出现的 Lambda 表……

阅读全文

Java8 的函数式编程

什么是函数式编程 简单说,「函数式编程」是一种「编程范式」,也就是如何编写程序的方法论。 它属于「结构化编程」结构化编程的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式: (1 + 2) * 3 - 4 传统的过程式编程,可能这样写: var a = 1 + 2; var b = a * 3; var……

阅读全文

Java8 接口中的 default 方法

为什么要有默认方法 在 Java8 之前,接口与其实现类之间的耦合度太高了,当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法解决了这个问题,它可以为接口添加新的方法,而不会破坏已有的接口的实现。这在 lambda 表达式作为 Java8 语言的重要特性而出现之际,为升级旧接口且保持向后兼容提供了途径。 1……

阅读全文

SpringCloud 总览

Spring Cloud 为构建分布式系统和微服务提供了一些通用的工具,例如:配置中心,服务注册与发现,熔断器,路由,代理,控制总线,一次性令牌,全局锁,leader选举,分布式 会话,集群状态等。 目前国内有很多公司还是使用dubbo做服务分解,但dubbo只提供了服务注册发现功能,要建立分布式系统还要……

阅读全文

Java 类加载的双亲委派机制

双亲委派机制 Java 中存在 3 种类型的类加载器: 引导类加载器 扩展类加载器 系统类加载器 三者是的关系是:引导类加载器是扩展类加载器的父类,扩展类加载器是系统类加载器的父类。 启动类加载器(BootStrap) 主要负责加载 JVM 自身所需要的类,该加载器由 C++ 实现,加载的是<JAVA_HOME&g……

阅读全文