慕课网高并发课程笔记(三)-项目准备

线程安全与线程不安全

  • 线程安全:代码所在的进程有多个线程在同时运行,这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果一样的,而且其他的变量的值也和预期是一样的,我们就认为这是线程安全的。简单的说,就是并发环境下得到我们期望的结果。
  • 线程不安全:就是不提供数据访问保护,有可能出现多个线程先后更改数据,所得到的数据是脏数据,也可能是在计算中出现错误。

转载请注明出处:http://shenshanlaoyuan.com/2018/05/05/Java/bingfa3/

访问原文「慕课网高并发课程笔记(三)-项目准备」获取最佳阅读体验并参与讨论

环境搭建与准备

Spring Boot构建项目

Https://start.spring.io/

具体搭建过程参考视频。

注解的准备

  • 线程安全的注解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
    * 对于线程安全的类,加入一个@ThreadSafe注解的标示
    * @Target(ElementType.TYPE) 说明作用于类上
    * @Retention(RetentionPolicy.SOURCE) 指定注解作用的范围,在编译的时候就会被忽略掉
    * @author gaowenfeng
    */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface ThreadSafe {
    String value() default "";
    }
  • 线程不安全的注解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
    * 用来标示[线程不安全的类]
    * @Target(ElementType.TYPE) 说明作用于类上
    * @Retention(RetentionPolicy.SOURCE) 指定注解作用的范围,在编译的时候就会被忽略掉
    * @author gaowenfeng
    */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface NotThreadSafe {
    String value() default "";
    }
  • 推荐写法的注解

    1
    2
    3
    4
    5
    6
    7
    8
    /**
    * 用来标记[推荐]的类或者写法
    */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Recommend {
    String value() default "";
    }
  • 不推荐写法的注解

    1
    2
    3
    4
    5
    6
    7
    8
    /**
    * 用来标记[不推荐]的类或者写法
    */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.SOURCE)
    public @interface NotRecommend {
    String value() default "";
    }

ElementType 详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
/** 声明注解作用在类,借口,枚举上*/
TYPE,
/** Field declaration (includes enum constants) */
/** 声明注解作用在属性上*/
FIELD,
/** Method declaration */
/** 声明注解作用在方法上*/
METHOD,
/** Formal parameter declaration */
/** 声明注解作用在参数上*/
PARAMETER,
/** Constructor declaration */
/** 声明注解作用在构造函数上*/
CONSTRUCTOR,
/** Local variable declaration */
/** 声明注解作用在本地变量上*/
LOCAL_VARIABLE,
/** Annotation type declaration */
/** 声明注解作用在注解上*/
ANNOTATION_TYPE,
/** Package declaration */
/** 声明注解作用在包上*/
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
/** 声明注解可以应用在TYPE声明上*/
TYPE_PARAMETER,
/**
* Use of a type
* Type.TYPE_USE 表示这个 Annotation 可以用在所有使用 Type 的地方(如:泛型,类型转换等)
* @since 1.8
*/
TYPE_USE
}

RetentionPolicy详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public enum RetentionPolicy {
/**
* Annotations are to be discarded by the compiler.
* 在编译的时候会被取消,只用于声明,理解,或者测试
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
* 注解将被编译器记录在类文件中,但在运行时不需要由VM保留,(默认的选项)
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
* 注解将被编译器记录在类文件中,但在运行时由VM保留,这样他们可以被反射获取(当你需要获取注解中字段的属性值的时候,需要用这个,比如AOP)
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}

并发模拟工具

工具

并发模拟代码

本文标题:慕课网高并发课程笔记(三)-项目准备

文章作者:深山老猿

发布时间:2018年05月05日 - 21:05

最后更新:2018年09月06日 - 00:09

原始链接:http://shenshanlaoyuan.com/2018/05/05/Java/bingfa3/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

深山老猿 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
如对你有帮助,请我喝杯咖啡吧!
显示 Gitment 评论