线程同步的注解:@ThreadSafe、@Immutable、@NotThreadSafe、@GuardedBy
Java并发编程中,用到了一些专门为并发编程准备的 Annotation。主要包括三类:
<dependency> <groupId>net.jcip</groupId> <artifactId>jcip-annotations</artifactId> <version>1.0</version> </dependency>
注解包含以下类
1、类 Annotation(注解)
就像名字一样,这些注解是针对类的。主有要以下三个:
@ThreadSafe
是表示这个类是线程安全的。具体是否真安全,那要看实现者怎么实现的了,反正打上这个标签只是表示一下。不线程安全的类打上这个注解也没事儿。
@Immutable
表示类是不可变的,包含了 @ThreadSafe 的意思。
@NotThreadSafe
表示这个类不是线程安全的。如果是线程安全的非要打上这个注解,那也不会报错。
这三个注解,对用户和维护者是有益的,用户可以立即看出来这个类是否是线程安全的,维护者则是可以根据这个注解,重点检查线程安全方面。另外,代码分析工具可能会利用这个注解。
2、域 Annotation(注解)
域注解是对类里面成员变量加的注解。
3、方法 Annotation(注解)
方法注解是对类里面方法加的注解。
域注解和方法注解都是用@GuardedBy( lock )来标识。里面的Lock是告诉维护者:这个状态变量,这个方法被哪个锁保护着。这样可以强烈的提示类的维护者注意这里。
@GuardedBy( lock )有以下几种使用形式:
1、@GuardedBy( "this" ) 受对象内部锁保护
2、@GuardedBy( "fieldName" ) 受 与fieldName引用相关联的锁 保护。
3、@GuardedBy( "ClassName.fieldName" ) 受 一个类的静态field的锁 保存。
4、@GuardedBy( "methodName()" ) 锁对象是 methodName() 方法的返值,受这个锁保护。
5、@GuardedBy( "ClassName.class" ) 受 ClassName类的直接锁对象保护。而不是这个类的某个实例的锁对象。
2. 域Annotation和方法Annotation
描述哪个状态变量被哪个锁保护着,以及哪个锁保护这些变量的信息:
@GuardedBy(lock):线程只有在持有了一个特定的锁(lock)后,才能访问某个域或方法;
@GuardedBy("this"):包换在对象中的内部锁(方法或域是这个对象的一个成员);
@GuardedBy("fieldName"):值与filedName引用的对象相关联的锁,或者是一个隐式锁(filedName没有引用一个Lock),或者是一个显示锁(filedName引用了一个Lock);
@GuardedBy("ClassName.fieldName"):类似于@GuardedBy("fieldName"),不过所引用的锁对象是存储在另一个类(或本类)中的静态域;
@GuardedBy("methodName()"):锁对象是methodName()方法的返回值;
@GuardedBy("ClassName.class"):ClassName类的直接量对象。
例子
import javax.annotation.concurrent.*;; @ThreadSafe public class Sequence { @GuardedBy("this") private int value; public synchronized int getNext() { return value++; } }
线程同步的注解:@ThreadSafe、@Immutable、@NotThreadSafe、@GuardedBy相关推荐
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- java线程 同步与异步 线程池
1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑 ...
- 分享Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步...
在这个文章里,我将分享一下在iOpenWorks.com这个网站试运行中碰到的若干问题和解决方案,这些问题包含了:(1)如何通过ASP.NET MVC预编译提高性能:(2)如何知道网站在运行中,用户响 ...
- .Net线程同步技术解读
C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 什么是线程安 ...
- 【转载】dotnet 线程同步
原文: http://www.cnblogs.com/seerlin/archive/2009/03/10/1407478.html 第二部分:线程同步基础 同步要领 下面的表格列展了.NET对协调或 ...
- Java --- 线程同步和异步的区别
1. Java 线程 同步与异步 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有 ...
- Java基础加强重温_08:线程不安全、线程同步、线程状态、线程状态切换、线程池(Executors类、newFixedThreadPool)、死锁、Lambda表达式、Stream
摘要 Java基础加强重温_08: 线程安全(线程安全概念.线程不安全案例). 线程同步(同步代码块.同步方法.Lock锁,锁对象). 线程状态(new新建.Runnable可运行.Blocked锁阻 ...
- Java线程--同步和异步的区别
本文转自https://blog.csdn.net/u011033906/article/details/53840525 1. Java 线程 同步与异步 多线程并发时,多个线程同时请求同一个资源, ...
- java 线程同步和异步
ava线程 同步与异步 线程池 1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的 ...
最新文章
- 接近开关的初步测试 : DF-11N
- 关于第十五届全国大学生智能车竞赛 STC 单片机
- 一文了解Spring Cloud Stream体系
- 米莱迪机器人加物理攻击_王者荣耀:新法师一姐米莱狄的出装与玩法,教你如何打出逆天输出...
- ffmpeg分析系列
- CSS教程--CSS背景
- html 自动适应手机屏幕大小,HTML5 canvas自适应手机屏幕大小的一种解决方案
- SAIF MBA2011年学费与资助政策发布公告
- mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
- Java23中设计模式(Design Patterns)详解
- c语言数组求出最大值,求给定数组的最大值与次大值
- python 抽象类、抽象方法、接口、依赖注入、SOLIP
- 武汉Apache Hadoop大数据平台,金融行业如何搭建大数据平台?数据采集、分析、处理如何实现?...
- 滴滴美团58携程,那些发生在大并购谈判桌背后的故事
- 前言-《揭示Kali Linux 》翻译连载02
- vue动态添加图片/背景图
- java控制台贪食蛇_java中的贪食蛇例程
- svg图片如何引入vue
- 人工智能ai换脸技术_人工智能技术如何帮助企业改善营销
- TPS和QPS的区别
热门文章
- 最新天气预报接口【2015-05-14改】
- 写计算机知识大全的结尾怎么写,写事作文开头结尾大全
- Office365完整离线安装包下载及自定义安装教程
- 如何使用 snap 包在 Linux 上安装 ONLYOFFICE 文档
- 九宫格按键输入c++
- 京东XDD机器人图文详细教程-优雅草科技老八
- Babylon.js 踩坑之正交摄像机,平行投影的相关设置
- 无线服务器功能,索尼WG-C20无线服务器 功能介绍
- 网络变压器工厂:了解POE POE+ 网络变压器(网络隔离滤波器)
- HDU-2224-The shortest path