0%

下文来自 On Java 8 - Chapter 8 Reuse

前言

  • final表示”这是不能改变的“
  • 可能使用final的三个地方:数据、方法、类
Read more »

Lambda表达式

本质

  • Lambda表达式的实质是函数式接口的实例
  • 所以以前用匿名内部类表示的,现在都可以用Lambda表达式来写

语法

  • ->:箭头操作符
  • 左侧:Lambda表达式的形参列表,也就是抽象方法的形参列表
  • 右侧:Lambda表达式的方法体,也就是重写的抽象方法的方法体

语法总结

  • 左侧:
    • Lambda形参列表的参数类型可以省略(类型推断)
    • 如果Lambda形参列表只有一个参数,则小括号()可省略
  • 右侧:
    • Lambda体应该用大括号{}包裹
    • 如果Lambda体只有一条执行语句(包括return语句),则大括号{}return关键字都可以省略
Read more »

读写锁

  • 读写互斥,读读共享

    • 读锁:共享锁
    • 写锁:独占锁/排它锁
  • 无论读锁还是写锁,都会发生死锁(读-写死锁,写-写死锁)

Read more »

快速失败

  • java.util下的集合都是快速失败的
  • 集合的遍历是通过迭代器实现的,迭代器迭代时会检查modCount == expectedModCount,如果进行并发修改,可能导致modCount != expectedModCount,导致并发修改异常
  • ArrayList
Read more »

ThreadLocal 简介

概念

  • 该类提供线程局部变量。 这些变量与它们的正常对应物的不同之处在于,访问其中的每个线程(通过其getset方法)具有其自己的、独立初始化的变量副本
  • ThreadLocal实例通常是希望将状态与线程相关联的类中的私有静态字段(例如,用户ID或事务ID)
  • 只要线程处于活动状态且ThreadLocal实例可访问,每个线程都拥有对其线程局部变量副本的隐式引用; 在一个线程消失之后,它的所有线程局部实例副本都要进行垃圾收集(除非存在对这些副本的其他引用)
Read more »

synchronized实现同步

  • synchronized实现同步的基础:Java 中的每一个对象都可以作为锁
  • 具体表现为以下3种形式:
    • 对于普通同步方法,锁是当前实例对象this
    • 对于静态同步方法,锁是当前类的Class对象
    • 对于同步方法块,锁是synchronized括号里配置的对象
Read more »