java高并发(四)并发编程与线程安全
代码有多个线程同时运行,而这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果是一样的,我们就认为是线程安全的。线程不安全就是线程不提供访问保护,有可能出现多个线程先后更改数据,造成所得到的数据是脏数据,也可能是计算时出现错误。
新建项目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高并发(四)并发编程与线程安全相关推荐
- 学习java的第四十天,线程的优先级、守护线程、线程同步机制、死锁
一.线程的优先级(priority) Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围1~10 Thr ...
- java 高并发im_java高并发(四)并发编程与线程安全
代码有多个线程同时运行,而这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果是一样的,我们就认为是线程安全的.线程不安全就是线程不提供访问保护,有可能出现多个线程先后更改数据,造成 ...
- Java高并发编程详解系列-Java线程入门
根据自己学的知识加上从各个网站上收集的资料分享一下关于java高并发编程的知识点.对于代码示例会以Maven工程的形式分享到个人的GitHub上面. 首先介绍一下这个系列的东西是什么,这个系列自己 ...
- Java高并发编程(四):并发编程基础
1. 线程简介 1.1 线程的定义 现代操作系统调度的最小单元是线程,也叫轻量级进程(LightWeight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器.堆栈和局部变量 ...
- Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...
JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...
- Java高并发与多线程网络编程
目录 一. 基础 1. 线程介绍 2. 创建并启动线程 3. 函数式接口编程 4. Thread 构造器 5. 守护线程 线程关系 6. join 7. interrupt 8. 优雅的结束线程 9. ...
- 《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》
<Java高并发核心编程.卷2,多线程.锁.JMM.JUC.高并发设计模式> 目录 第1章 多线程原理与实战 1.2 无处不在的进程和线程 1.2.1 进程的基本原理 1.2.2 线程的基 ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
最新文章
- 完全免费,简化版Plotly推出,秒绘各类可视化图表
- html 常用方法,jquery的常用方法有哪些?
- 2019年春季学期第四周作业Compile Summarize
- ES6常用知识总结(20%的知识占80%的份额)
- php干扰函数,php – 类构造函数干扰另一个类
- 使用Boxfuse轻松在云中运行Spring Boot应用程序
- python箴言_Python高效率编程的8条箴言
- Python编程基础08:循环结构
- 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
- IIS 10 安装URLRewrite组件 方式
- visual studio for mac在线安装网络错误
- DeepL与有道翻译对比
- Apollo CANbus 模块原理及源码学习
- 高一被清华姚班录取,一个重度网瘾少年到理论计算机科学家的蜕变
- 上野千鹤子名誉教授的东大祝辞中提到的“元知识”是什么?
- 20款免费的WordPress企业站主题下载
- Canvas箭头动画
- Zephyr UART
- 如何从海量用户发布的内容中挖掘出各城市时下的最热话题
- 【第十篇】商城系统-性能测试