superT

写个hello world了解Rxjava

本小妞迷上赌 提交于 2020-05-01 02:41:24
[toc] spring boot 项目中使用Rxjava2 #什么是Rxjava? 来自百度百科的解释 RxJava - JVM响应式扩展Reactive Extensions 用于使用Java VM的可观察序列编写异步和基于事件的程序的库。 ReactiveX是一个通过使用可观察序列来编写异步和基于事件的程序的库。 它扩展了观察者模式以支持数据和/或事件序列,并增加了运算符,使您可以声明性地组合序列,同时抽象出对低级线程,同步,线程安全性,并发数据结构和非线程等事物的关注阻塞I / O。 ##在微服务中的优点 隔离每个服务,即使单个服务的响应失败了,也不会影响整个请求的响应。 #上手使用 ##引入依赖 Rxjava 的版本: https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjava 本次采用最新的2.2.2版本 <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> <version>2.2.2</version> </dependency> 在spring boot中引入依赖后就可以使用Rxjava了,下面通过写一组hello world来看看Rxjava的基本原理。 import io

Java中的泛型 --- Java 编程思想

∥☆過路亽.° 提交于 2020-04-22 02:16:34
前言 ​ 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的。通透理解泛型是学好基础里面中非常重要的。于是,我对《Java编程思想》这本书中泛型章节进行了研读。可惜遗憾的是,自己没有太多的经验,有些东西看了几次也是有点懵。只能以后有机会,再进行学习了。但是自己也理解了挺多的。下面就是自己对于泛型的理解与感悟。如有不对,望指出。 概念 由来: Java 一开始设计之初是没有泛型这个特性的,直到jdk 1.5中引入了这个特性。Java 的泛型是由擦除来实现的。要知道擦除是什么?往下看。 概念:一般的类和方法,只能使用具体的类型;要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。泛型实现了参数化类型的概念,使代码应用于多个类型。泛型在编程语言中出现时,其最初的目的是希望类和方法具有广泛的表达能力。 简单泛型 ​ 有很多原因促成泛型的出现,其中最重要的一个原因就是为了创造容器类。我们暂时不指定类型,而是稍后再决定具体使用什么类型。要达到这个目的,需要使用类型参数,用尖括号括住,放在类名的后面。然后使用这个类的时候,再用实际的类型替换此类型参数。在下面例子中,T就是类型参数。代码如下: public class Holder<T> { private T a;

JAVA开发-泛型实例

孤街醉人 提交于 2020-04-18 08:04:20
JAVA开发过程中经常会涉及到跟踪源码或查看架构师核心代码的活动。在核心代码或源码中常见有<T>,<E>,<K,V>,Class<?>,<? extends T> <? super T> 相关的代码。看起来十分高大上,又不容易看懂,可能会吓退一些同学。在此做一次整理,并附相应代码供调试理解。 <T>,<E>,<K,V> 首先这些实际都是泛型中的占位符,也可以换成A-Z都是可以的。不是一定要写成这些,也可以A,B,C都是可以的。不过约定俗成的东西方便大家理解,尽量不擅自改动。 在贴录代码之前先说明一下相关类的关系 TypeClass类与TypeClass1是并行的两个演示bean,TypeClassA extends TypeClass, TypeClassB extends TypeClassA 这是基础的关系,下附相关代码 package generic.bean; /** 测试Bean类 @author zhousjmas@hotmail.com */ public class TypeClass { private static String key ; private static String value; static { key = "key-TypeClass"; value = "value-TypeClass"; name = "name-TypeClass";

Java非阻塞异步编程——CompletableFuture

橙三吉。 提交于 2020-04-12 17:24:41
前言 对于Node开发者来说,非阻塞异步编程是他们引以为傲的地方。而在JDK8中,也引入了非阻塞异步编程的概念。所谓非阻塞异步编程,就是一种不需要等待返回结果的多线程的回调方法的封装。使用非阻塞异步编程,可以很大程度上解决高并发场景的各种问题,提高程序的运行效率。 为什么要使用非阻塞异步编程 在jdk8之前,我们使用java的多线程编程,一般是通过Runnable中的run方法进行的。这种方法有个明显的缺点:没有返回值。这时候,大家会使用Callable+Future的方式去实现,代码如下。 public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> stringFuture = executor.submit(new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(2000); return "async thread"; } }); Thread.sleep(1000); System.out.println("main thread");

知识详解 泛型

故事扮演 提交于 2020-04-07 17:53:56
泛型是什么? 泛型设计原则: 只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常. 泛型: 把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型 参数化类型: 把类型当作是参数一样传递 <数据类型> 只能是引用类型 为什么需要泛型? 早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不太安全 首先,我们来试想一下:没有泛型,集合会怎么样 Collection、Map集合对元素的类型是没有任何限制的。 本来我的Collection集合装载的是全部的Dog对象,但是外边把Cat对象存储到集合中,是没有任何语法错误的。 把对象扔进集合中,集合是不知道元素的类型是什么的,仅仅知道是Object。因此在get()的时候,返回的是Object。 外边获取该对象,还需要强制转换 有了泛型以后: 代码更加简洁【不用强制转换】 程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】 可读性和稳定性【在编写集合的时候,就限定了类型】 常用的 T,E,K,V,? 本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T , 我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,

java面向对象2(25) ​​​​​​​泛型二(高阶知识详解)

陌路散爱 提交于 2020-03-13 07:27:09
泛型二 一. 高级案例:接口上加泛型 不确定,接口中 方法的返回值类型、参数类型 。 //1、定义泛型: public interface Animal< E > { void eat( E food); //参数不确定 E run(); //返回值类型不确定 } // 2 、使用泛型:为泛型赋值 方式一:定义实现类时,为泛型赋值: /** * 方式一:定义实现类时,为泛型赋值 */ public class Dog implements Animal<String> { @Override public void eat(String food) { System. out .println( "狗吃" +food); } @Override public String run() { return "自由地奔跑" ; } } 方式二:定义实现类,创建实现类对象时,为泛型赋值 /** * 2、定义接口的实现类时无法确定泛型具体类型, * 等到创建对象时再为泛型赋值 */ public class Person< E > implements Animal< E > { @Override public void eat( E food) { System. out .println( "人吃:" +food); } @Override public E run() {

计算下期和值最准办法

耗尽温柔 提交于 2020-03-08 16:53:11
:包含与数字运算有关的类。 常用静态方法 abs():取绝对值,Math.abs(-100)=100 floor():向下取值,Math.floor(10.7)=10 round():四舍五入. Collections类:addAll(Collection<? super T> c, T... elements) 将所有指定的元素添加到指定的集合。 shuffle(List<?> list) 使用默认的随机源随机排列指定的列表。(打乱list中的数据) sort(List<T> list) 进行排序 一个人,身边有多少人,就有多大的世界,有什么 样的人,就有什么样的世界。这些人素养的高低,决定了你的高雅与低俗、辽远与浅狭、明媚与卑琐。一句话,他人的质量,就是你的世界的质量。 在 自然的山水里,无论走多远,最后还要回到这群人当中。也就是说,你最终要回到自己的世界里来。远足,是心灵的沐洗,是换一种方式让精神突围, 是以自然的视觉,看清人的世界。 身边的世界,总有你不喜欢的人,总有你厌弃的事,这些必然要来到生命中,它们来到,只是为揭示生活的真相,告 诉你生活是怎么一回事。 一个人的强大,就是能与不堪的人和事周旋,最终,战胜懦弱卑怯的自己。你救不起道德沦丧,但在一大片道德沦丧里,你可 以选择自己巍然挺立。 来源: oschina 链接: https://my.oschina.net/u

java面向对象2(19) ​​​​​​​集合工具类(快捷操作工具)

一个人想着一个人 提交于 2020-03-04 22:47:13
​ 集合工具类 快捷排序、快捷打乱顺序、快捷查找元素、快捷展示控制台 一. 集合快捷操作工具-Collections Collections是集合工具类,专门对集合( ArrayList 、 LinkedList 、 Vector )进行操作。 常用方法: 方法名称 描述 public static <T> void sort (List<T> list) 从小到大排序 默认只能对基本数据类型 public static <T> int binarySearch(List<?> list,T key) 查找元素索引(必须先排序),否则无法返回索引 元素重复,寻找最后一个出现的元素【不研究】 public static void shuffle(List<?> list) 随机打乱元素顺序 public addAll ( Collection <? super T> c, T... elements) 一次添加多个元素 实用举例: /* * Collections工具类: * */ public static void main(String[] args) { //创建ArrayList集合 ArrayList<Integer> list1 = new ArrayList<Integer>(); //1、快捷一次性添加数据:addAll Collections. addAll

Java8 Stream reduce操作

耗尽温柔 提交于 2020-02-27 15:03:45
Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果 。在之前的一篇文章Java8函数式编程中简单介绍, Stream的count、min 和max方法底层都是依赖reduce实现的 ,本篇文章将简单介绍一下Java8 Stream reduce的几种基本用法。 首先来看一下Reduce三种形式: S.N. 方法说明 1 Optional<T> reduce(BinaryOperator<T> accumulator); 对Stream中的数据通过累加器accumulator迭代计算,最终得到一个Optional对象 2 T reduce(T identity, BinaryOperator<T> accumulator); 给定一个初始值identity,通过累加器accumulator迭代计算,得到一个同Stream中数据同类型的结果 3 <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner); 给定一个初始值identity,通过累加器accumulator迭代计算,得到一个identity类型的结果,第三个参数用于使用并行流时合并结果 1. Optional<T> reduce

河内官方

白昼怎懂夜的黑 提交于 2020-01-06 18:19:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 河内官方主管大号:神风筘【80000】备用【 扣薇同步 57678】【备用91689】待遇顶尖 包含与数字运算 有 关的类。 常用静态方法 abs():取绝对值,Math.abs(-100)=100 floor():向下取值,Math.floor(10.7)=10 round():四舍五入. Collections类:addAll(Collection<? super T> c, T... elements) 将所 有 指定的元素添加到指定的集合。 shuffle(List<?> list) 使用默认的随机源随机排列指定的列表。(打乱list中的数据) sort(List<T> list) 进行排序 一个人,身边 有 多少人,就 有 多大的世界, 有 什么样的人,就 有 什么样的世界。这些人素养的高低,决定了你的高雅与低俗、辽远与浅狭、明媚与卑琐。一句话,他人的质量,就是你的世界的质量。 在自然的山水里,无论走多远,最后还要回到这群人当中。也就是说,你最终要回到自己的世界里来。远足,是心灵的沐洗,是换一种方式让精神突围,是以自然的视觉,看清人的世界。 身边的世界,总 有 你不喜欢的人,总 有 你厌弃的事,这些必然要来到生命中,它们来到,只是为揭示生活的真相,告诉你生活是怎么一回事。 一个人的强大