关于 rpc 的整理和理解

RPC 的主要目标就是为了让构建分布式计算(应用)变得更加简单,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。

阅读更多

JUC·ThreadPoolExecutor 线程池

原文:https://juejin.cn/post/6844903560899985415

ThreadPoolExecutor算是JUC中最常用的类之一了。ThreadPoolExecutor,顾名思义,thread-pool-executor,硬翻译就是“线程-池-执行者”;java中,通过ThreadPoolExecutor可以很容易的创建一个线程池。但是我们为什么要使用线程池?呢?它能够带来什么样的优势呢?它又是怎么实现的呢?OK,带着这几个问题,我们来学习一下JAVA中的线程池技术。

阅读更多

JUC·Executor 框架

原文:https://juejin.cn/post/6844903560371503112

前言

多线程和并发这两个东西真的是向往已久,总是有一种神秘的感觉,想去探索一波,又担心水平不够无法驾驭。想以读书笔记的方式来写,但是又觉得缺少自己的一些思考;但是在没有足够并发编程经验的情况下又没法去写出很深刻的东西,毕竟没有踩过坑。所以在阅读spring源码的同时,也想抽点时间来看一看JUC的东西,关于这块只能说是记录自己学习JUC的一个过程,尝试用一些具体的代码demo来加深理解。所以就把本系列写成《【 初识】-JUC·XXXX》,用来让自己打开并发编程的大门。

阅读更多

怎么写一个死锁?

原文:https://juejin.cn/post/6844903520886325255

看着看着就想着怎么能写一个死锁呢,打开 eclipse,突然感觉无从下手;之前都是一直在解决阻塞、死锁这些问题,现在反过来去写一个死锁感觉有点莫名奇妙。。。

ok, 写一个死锁就要有一种场景,并且满足死锁的条件。

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
阅读更多

并发编程---进程、线程安全

原文:https://juejin.cn/post/6844903502154563597

在 java 中,所有的变量(实例字段,静态字段,构成数组的元素,不包括局部变量和方法参数)都存储在主内存中,内个线程都有自己的工作内存,线程的工作内存保存被线程使用到的变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行,为不能直接读写主内存的变量。不同线程之间也不恩能够直接访问对方工作内存中的变量,线程间比变量值的传递通过主内存来完成。

本文主要是了解并发编程中的涉及一些基础概念,如:临界区、互斥量、CAS、重排序以及 Java 语言中的一些关键字。

阅读更多

聊一聊 RestTemplate

原文:https://juejin.cn/post/6844903695981740046

从 3.0 版本开始,Spring 提供了 RestTemplate 作为用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。

本篇文章将从 RestTemplate 提供的 API 入手,先来了解下 RestTemplate 的具体使用,然后再对其中涉及到的几个核心类进行分析,最后再来分析下 RestTemplate 执行的整个流程,篇幅比较长,建议先码为快!

阅读更多

聊一聊 Spring 中的扩展机制之 NamespaceHandler

原文:https://juejin.cn/post/6844903665262657544

前一篇 聊一聊 Spring 中的扩展机制(一) 中聊到了ApplicationListenerApplicationContextAwareBeanFactoryAware三种机制。本篇将介绍 NamespaceHandler 的扩展使用。

相信很多小伙伴对于这几个类都不陌生,基本基于java实现的RPC框架都会使用,比如 Dubbo , SOFARpc 等。本文先从几个小demo入手,了解下基本的概念和编程流程,然后分析下 SOFARpc 中是如何使用的。

阅读更多