JavaSE基础知识梳理——注解、多线程下的集合

十一、注解

11.1 基本概念

  • 所有注解都隐式扩展自java.lang.annotation.Annotation接口,而且不需要为每个注解提供他的实现类。

  • 注解可以为类、方法、变量等等注释,注解要紧跟被注释的对象,不加分号。

  • 注解的定义方式

    public @interface name{
        type element();
        type element() default value;//变量名要加括号,可以有默认值
        type value();//当注解中有且只有一个变量,且名字为value。或者有多个变量但是都有默认值,这时候可以省略value直接给注解赋值。
    }
    

11.2 元注解

  • 元注解是jdk默认自带的注解,用于指定自定义注解的属性

    @Target:
    用于指定注解的作用于,如METHOD,FIELD,CLASS,值为数组类型//elementType.METHOD...
    
    @Rentension:
    用于指定一条注解的保留时间://RetentionPolicy.CLASS...
    RUNTIME,保存在class文件中,并且可以被反射访问
    CLASS,保存在class文件中,不能被反射访问
    SOURCE,只保存在源文件中
    @Inherited:只能用于类的注解,子类拥有和父类一样的注解。
    

10.3 通过反射获取注解

  • 注解的Rentension值为RUNTIME的才能通过反射获取

    Method toString = User.class.getMethod("toString");  //拿到方法
    boolean b = toString.isAnnotationPresent(MyAnnotation.class);  //判断方法上面是否有注解
    MyAnnotation value = toString.getAnnotation(MyAnnotation.class);    //如果有注解就拿到这个注解
    System.out.println(value.name());  //拿到注解的值
    

十三、多线程下的队列

  • JUC包下的队列

阻塞式 阻塞式 非阻塞式
LinkedBlockingQueue ArrayBlockingQueue ConcurrentLinkedQueue
使用独占锁实现的无界链表队列 使用有界数组实现的阻塞队列(初始容量为多大就只能添加多少元素) CAS算法实现
==boolean offer==:队列末尾添加,如果传入为null抛NPE异常,如果队列满了,返回false,反之返回true。该方法是==不阻塞==的 ==boolean offer==:队列末尾添加,如果传入为null抛NPE异常,如果队列满了,返回false,反之返回true。该方法是==不阻塞==的 ==boolean add\offer==:队列末尾添加,如果传入为null则抛NPE异常。如果成功返回true
==void put==:队列末尾添加,如果传入为null抛出NPE异常,如果队列满了,则阻塞当前线程直到队列空闲添加成功。如果在==阻塞==时被中断则抛出InterruptedException返回 ==void put==:队列末尾添加,如果传入为null抛出NPE异常,如果队列满了,则阻塞当前线程直到队列空闲添加成功。如果在==阻塞==时被中断则抛出InterruptedException返回
==E poll==:从队首移除元素并返回,如果队列为空返回null,==非阻塞== ==E poll==:从队首移除元素并返回,如果队列为空返回null,==非阻塞== ==E poll==:从队首获取并移除,如果为空返回null。
==E peek==:返回队首元素不删除,如果队列为空返回null,该方法==不阻塞== ==E peek==:返回队首元素不删除,如果队列为空返回null,该方法==不阻塞== ==E peek==:从队首获取不移除,如果为空返回null
==E take==:从队首移除元素并返回,如果队列为空则==阻塞==当前线程直到队列不为空返回元素 ==E take==:从队首移除元素并返回,如果队列为空则==阻塞==当前线程直到队列不为空返回元素
==boolean remove==:删除队列指定元素obj,有则删除返回true,反之false。删除第一个元素。==不阻塞== ==boolean remove==:删除队列指定元素obj,有则删除返回true,反之false。删除第一个元素。==不阻塞== ==boolean remove==:如果队列存在该元素则删除,如果存在多个则删除第一个,并返回true,否则返回false
==int size==:返回队列元素个数,这个size比ConcurrentLinkedQueue的size准确,因为加锁保证了遍历时的原子性,而cas不能保证遍历的原子性 ==int size==:返回队列元素个数,这个size比ConcurrentLinkedQueue的size准确,因为加锁保证了遍历时的原子性,而cas不能保证遍历的原子性 ==contains\size==:弱一致性,有可能在遍历的时候其它线程已经操作了队列。
阻塞式 阻塞式
PriorityBlockingQueue DelayQueue
==带优先级的无界阻塞队列,内部用数组存储==,但是这个不同于ArrayBlockingQueue,它是==可以扩容==的。每次出队都==返回优先级最高或者最低的元素==,内部使用平衡二叉树堆实现,遍历元素不保证有序。默认使用存储对象的==compareTo==比较规则,可以构造方法传入一个==Comparotor==自定义规则。优先级越高的元素在越顶部。优先级是自定义的,其实就是Comparator或者Comparable比较规则。 ==无界阻塞延迟队列,每个元素都有一个过期时间==,当从队列获取元素时,只有过期元素才会出队列。==队首元素是最快要过期的元素==
==boolean offer==:无界队列,可以一直添加 ==boolean offer==:插入元素到队尾,如果==元素为null抛出NPE异常==,否则因为是无界队列,可以一直插入元素
==E poll==:获取根节点元素,如果为空,返回null ==E poll==:获取并移除队首过期元素,如果没有就返回null
==E take==:获取根节点元素,如果队列为空则==阻塞== ==E take==:获取并移除队列中即将过期的元素(队首),如果没有,就==阻塞==等待
==void put==:内部==调用offer==,因为无界,所以==不需要阻塞==
==int size==:返回元素个数,加了锁,所以精确 ==int size==:计算队列元素个数,包含过期和未过期

十四、多线程下的集合

  • 多线程下的线程安全的集合,这里介绍的不是通过Collections.synchronizedList这种方式获得的集合,这种集合效率低,因为使用了synchronized同步。多线程下的集合使用的是Lock锁。
  • 多线程下的集合使用方法和单线程的集合一样。

    +
    image-20200606161542003.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342