java注解关键字java基础部分:



7 种实现异步编程的方式

笔耕不辍,
7 种实现异步编程的方式
大家好,我是小富~


1、继承 Thread
Java中直接继承 Thread类,应该是创建异步线程最简单的方式。

2、注解 @Async
SpringBoot 框架还提供了一个@Async注解可以快速的实现异步线程执行,但使用的是默认线程池,因为默认线程的局限性,所以通常会自定义线程池配置。

3、Future
有些业务不仅仅要执行过程,还要获取执行结果。

4、Spring ApplicationEvent 事件
事件机制在大型项目中被经常使用,Spring专门提供了一套事件机制的接口,满足了架构原则上的解耦。


5、FutureTask
FutureTask 实现了 RunnableFuture 接口,则 RunnableFuture 接口继承了 Runnable 接口和 Future 接口,既可以直接被 Thread 执行;又可以获得任务的执行结果。

6、消息队列
消息队列天生就是这种异步架构,具有超高吞吐量和超低时延。


7、异步框架 CompletableFuture
Java 并发包提供了 CompletableFuture 类,它是基于异步函数式编程的。相对阻塞式等待返回结果, 可以通过回调的方式来处理计算结果,实现了异步非阻塞,性能更优。
平台机制限制,只有提纲内容,完整文章已经全部同步在GitHub地址: 网页链接 ,欢迎stars[太阳][太阳][太阳]

Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解

Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。

1、自定义可重复注解:使用@Repeatable元注解,参数为可重复注解的容器
@Repeatable(MyAnnotations.class)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default &34;;
}

2、注解容器定义(可重复注解的容器的Target和Retention必须要比可重复注解的范围大)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotations {
MyAnnotation[] value();
}

3、Java 8为ElementType枚举增加了TYPE_PARAMETER、TYPE_USE两个枚举值,这样就允许定义枚举时使用@Target(ElementType.TYPE_USE)修饰,这种注解被称为Type Annotation(类型注解),Type Annotation可用在任何用到类型的地方。从Java 8开始,Type Annotation可以在任何用到类型的地方使用。
public class TestAnnotationn {
@MyAnnotation
private @MyAnnotation String test;
@MyAnnotation(&34;)
@MyAnnotation(&34;)
public void show() {
}
public @MyAnnotation void test(@MyAnnotation(&34;) String str) {
Class<@MyAnnotation TestAnnotationn> clazz = TestAnnotationn.class;
}
@Test
public void test1() {
Class<TestAnnotationn> clazz = TestAnnotationn.class;
Method[] me = clazz.getDeclaredMethods();
for (Method method : me) {
if (&34;.equalsIgnoreCase(method.getName())) {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
for (Annotation[] c : parameterAnnotations) {
for (Annotation annotation : c) {
System.out.print(((MyAnnotation) annotation).value());
}
}
MyAnnotation[] annotationsByType = method.getAnnotationsByType(MyAnnotation.class);
for (MyAnnotation myAnnotation : annotationsByType) {
System.out.println(myAnnotation.value());
}
}
}
}

【Java 注解 Annotation自定义实战】Java 提供的一种原程序中的元素关联任何信息和任何元数据的途径和方法

【Java 注解 Annotation自定义实战】Java 提供的一种原程序中的元素关联任何信息和任何元数据的途径和方法。网页链接

java基础部分:

java基础部分:
注释,标识符,关键字:
注释并不会执行,用于标识我们写的代码的意思,便于后期维护
单行注释: //
多行注释:/* xxx内容xxx */
标识符是java所有组成部分的名字,包括类名,方法名,变量名都是标识符
标识符的首字母必须是字母或者$或者下划线_,并且大小写十分敏感
可以使用中文来定义标识符
数据类型:
java是一种强类型语言,所有变量必须先定义才能使用,并且要严格符合规范
基本类型:整数类型(byte 1 short
2 int 4 long 8)浮点型(float 4 double 8)字符型(char 2) boolean 1
在某类业务时,由于float类型的特殊性,有时会导致当float数额较大或者较少时,会导致取值不正确,尽量避免使用float类型。
通常int定义二级制时,我们可以用
2进制 0b 八进制0 16进制0x
int a = 10;
int b = 0b1101;
int c = 0x10;
来表示
所有中文本质上都是一个数字
因此可以把char强转为int类型
引用类型:除了基本类型之外的其他数据类型
类型转换:
方式一:自动转换 由低到高自动转换(byte,short,char->int->long->float->double)
方式二:强制转换(类型)变量名
注意点:
不能对布尔类型进行转换
不能转换不相干的类型
强制转换时会出现内存溢出和精度问题

变量,常量:
类变量:用static修饰,可以直接调用使用
实例变量:在方法外,类里面定义,不用static修饰,可以不初始化,如果不初始化,取此类型的默认值,除了基本类型,其余的默认值都为null
局部变量:在方法里定义,必须声明和初始化值
运算符:
算术运算符:+ - * / % ++ --
赋值运算符:=
关系运算符:> < >= <= == != instanceof
逻辑运算符:&& || !
位运算符:& | ^ ~ >> << >>>
条件运算符:?:
扩展赋值运算符:+= -= /= *=