代码有多个线程同时运行,而这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果是一样的,我们就认为是线程安全的。线程不安全就是线程不提供访问保护,有可能出现多个线程先后更改数据,造成所得到的数据是脏数据,也可能是计算时出现错误。

新建项目project-1,pom.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.vincent</groupId><artifactId>concurrency</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><es.version>6.2.3</es.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.4.RELEASE</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

新建一个注解ThreadSafe.java,我们期望的是对于一个线程安全的类,我们使用ThreadSafe来进行标识,因为我们后面的代码常常会使用线程安全和不安全。内容如下:

package com.vincent.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 用来标记线程安全的类或者写法*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ThreadSafe {String value() default "";
}

接下来定义一个线程不安全的注解:

/*** 用来标记线程【不安全】的类或者写法*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface NotThreadSafe {String value() default "";
}

定义一个推荐的注解:

/*** 用来标记线程【推荐】的类或者写法*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Recommend {String value() default "";
}

定义一个不推荐的注解:

/*** 用来标记线程【不推荐】的类或者写法*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface NotRecommend {String value() default "";
}

java高并发(四)并发编程与线程安全相关推荐

  1. 学习java的第四十天,线程的优先级、守护线程、线程同步机制、死锁

    一.线程的优先级(priority) Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围1~10 Thr ...

  2. java 高并发im_java高并发(四)并发编程与线程安全

    代码有多个线程同时运行,而这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果是一样的,我们就认为是线程安全的.线程不安全就是线程不提供访问保护,有可能出现多个线程先后更改数据,造成 ...

  3. Java高并发编程详解系列-Java线程入门

    根据自己学的知识加上从各个网站上收集的资料分享一下关于java高并发编程的知识点.对于代码示例会以Maven工程的形式分享到个人的GitHub上面.   首先介绍一下这个系列的东西是什么,这个系列自己 ...

  4. Java高并发编程(四):并发编程基础

    1. 线程简介 1.1 线程的定义 现代操作系统调度的最小单元是线程,也叫轻量级进程(LightWeight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器.堆栈和局部变量 ...

  5. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

  6. Java高并发与多线程网络编程

    目录 一. 基础 1. 线程介绍 2. 创建并启动线程 3. 函数式接口编程 4. Thread 构造器 5. 守护线程 线程关系 6. join 7. interrupt 8. 优雅的结束线程 9. ...

  7. 《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》

    <Java高并发核心编程.卷2,多线程.锁.JMM.JUC.高并发设计模式> 目录 第1章 多线程原理与实战 1.2 无处不在的进程和线程 1.2.1 进程的基本原理 1.2.2 线程的基 ...

  8. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  9. 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )

    文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...

最新文章

  1. 完全免费,简化版Plotly推出,秒绘各类可视化图表
  2. html 常用方法,jquery的常用方法有哪些?
  3. 2019年春季学期第四周作业Compile Summarize
  4. ES6常用知识总结(20%的知识占80%的份额)
  5. php干扰函数,php – 类构造函数干扰另一个类
  6. 使用Boxfuse轻松在云中运行Spring Boot应用程序
  7. python箴言_Python高效率编程的8条箴言
  8. Python编程基础08:循环结构
  9. 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
  10. IIS 10 安装URLRewrite组件 方式
  11. visual studio for mac在线安装网络错误
  12. DeepL与有道翻译对比
  13. Apollo CANbus 模块原理及源码学习
  14. 高一被清华姚班录取,一个重度网瘾少年到理论计算机科学家的蜕变
  15. 上野千鹤子名誉教授的东大祝辞中提到的“元知识”是什么?
  16. 20款免费的WordPress企业站主题下载
  17. Canvas箭头动画
  18. Zephyr UART
  19. 如何从海量用户发布的内容中挖掘出各城市时下的最热话题
  20. 【第十篇】商城系统-性能测试

热门文章

  1. sql 2005判断某个表或某个表中的列是否存在
  2. python游戏开发的五个案例分享
  3. python算法与数据结构-选择排序算法(33)
  4. 常见的网站服务器架构有哪些?
  5. 编译安装php的openssl组件时遇到 libssl not found解决办法
  6. Bootstrap常用类
  7. Yii的action
  8. Bug思路不清晰严谨
  9. Windows下适用于PHP 7.1的memcache扩展工具编译
  10. php函数文件,PHP文件函数大全