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相关推荐

  1. C#中的线程(二) 线程同步基础

    1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...

  2. java线程 同步与异步 线程池

    1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑 ...

  3. 分享Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步...

    在这个文章里,我将分享一下在iOpenWorks.com这个网站试运行中碰到的若干问题和解决方案,这些问题包含了:(1)如何通过ASP.NET MVC预编译提高性能:(2)如何知道网站在运行中,用户响 ...

  4. .Net线程同步技术解读

    C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 什么是线程安 ...

  5. 【转载】dotnet 线程同步

    原文: http://www.cnblogs.com/seerlin/archive/2009/03/10/1407478.html 第二部分:线程同步基础 同步要领 下面的表格列展了.NET对协调或 ...

  6. Java --- 线程同步和异步的区别

    1. Java 线程 同步与异步 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有 ...

  7. Java基础加强重温_08:线程不安全、线程同步、线程状态、线程状态切换、线程池(Executors类、newFixedThreadPool)、死锁、Lambda表达式、Stream

    摘要 Java基础加强重温_08: 线程安全(线程安全概念.线程不安全案例). 线程同步(同步代码块.同步方法.Lock锁,锁对象). 线程状态(new新建.Runnable可运行.Blocked锁阻 ...

  8. Java线程--同步和异步的区别

    本文转自https://blog.csdn.net/u011033906/article/details/53840525 1. Java 线程 同步与异步 多线程并发时,多个线程同时请求同一个资源, ...

  9. java 线程同步和异步

    ava线程 同步与异步 线程池 1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的 ...

最新文章

  1. 接近开关的初步测试 : DF-11N
  2. 关于第十五届全国大学生智能车竞赛 STC 单片机
  3. 一文了解Spring Cloud Stream体系
  4. 米莱迪机器人加物理攻击_王者荣耀:新法师一姐米莱狄的出装与玩法,教你如何打出逆天输出...
  5. ffmpeg分析系列
  6. CSS教程--CSS背景
  7. html 自动适应手机屏幕大小,HTML5 canvas自适应手机屏幕大小的一种解决方案
  8. SAIF MBA2011年学费与资助政策发布公告
  9. mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
  10. Java23中设计模式(Design Patterns)详解
  11. c语言数组求出最大值,求给定数组的最大值与次大值
  12. python 抽象类、抽象方法、接口、依赖注入、SOLIP
  13. 武汉Apache Hadoop大数据平台,金融行业如何搭建大数据平台?数据采集、分析、处理如何实现?...
  14. 滴滴美团58携程,那些发生在大并购谈判桌背后的故事
  15. 前言-《揭示Kali Linux 》翻译连载02
  16. vue动态添加图片/背景图
  17. java控制台贪食蛇_java中的贪食蛇例程
  18. svg图片如何引入vue
  19. 人工智能ai换脸技术_人工智能技术如何帮助企业改善营销
  20. TPS和QPS的区别

热门文章

  1. 最新天气预报接口【2015-05-14改】
  2. 写计算机知识大全的结尾怎么写,写事作文开头结尾大全
  3. Office365完整离线安装包下载及自定义安装教程
  4. 如何使用 snap 包在 Linux 上安装 ONLYOFFICE 文档
  5. 九宫格按键输入c++
  6. 京东XDD机器人图文详细教程-优雅草科技老八
  7. Babylon.js 踩坑之正交摄像机,平行投影的相关设置
  8. 无线服务器功能,索尼WG-C20无线服务器 功能介绍
  9. 网络变压器工厂:了解POE POE+ 网络变压器(网络隔离滤波器)
  10. HDU-2224-The shortest path