欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《Java开发手册》阅读笔记

程序员文章站 2022-03-03 09:23:59
一、集合处理1、只要覆写 equals,就必须覆写 hashCode;Set集合存储对象必须重写hashCode和equals;自定义对象作为map的key必须重写…2、ArrayList 的 subList 结果不可强转成ArrayList3、Map集合的keySet,values,entrySet返回集合对象时不可进行添加操作;Conllections返回的对象,不能进行添加删除操作,sublist使用时,不要对原集合进行操作4、使用集合转数组必须使用集合的toArray(数组),传入的必...

一、集合处理

1、只要覆写 equals,就必须覆写 hashCode;Set集合存储对象必须重写hashCode和equals;自定义对象作为map的key必须重写…

《Java开发手册》阅读笔记

2、ArrayList 的 subList 结果不可强转成ArrayList

《Java开发手册》阅读笔记

3、Map集合的keySet,values,entrySet返回集合对象时不可进行添加操作;Conllections返回的对象,不能进行添加删除操作,sublist使用时,不要对原集合进行操作

《Java开发手册》阅读笔记

4、使用集合转数组必须使用集合的toArray(数组),传入的必须是空数组,不能使用toArray的无参方法

《Java开发手册》阅读笔记

5、Collection接口任何实现类使用addAll()时都要进行空指针判断,Arrays.asList()把数组转换成集合时,不能对数组进行修改操作

《Java开发手册》阅读笔记

6、泛型通配符<? extends T>不嫩使用add方法,适合经常往外取数据,

<? super T>不能使用 get 方法,适合经常插入数据,没有泛型限制定义的集合需要进行类型判断

《Java开发手册》阅读笔记

7、foreach循环里进行增删操作,考虑使用迭代器

Comparator.sort()时,要处理三种情况

《Java开发手册》阅读笔记

8、集合泛型定义时,使用 diamond 语法或全省略。

集合初始化时,置顶集合大小

遍历map集合使用entrySet

《Java开发手册》阅读笔记

9、Map集合不能为空的情况

hashMap都可以为空

treeMap值可以为空

《Java开发手册》阅读笔记

10、合理利用好集合的有序性(sort)和稳定性(order)

《Java开发手册》阅读笔记

二、并发处理

11、单例对象和方法要保证线程安全;线程池的名称要有意义

《Java开发手册》阅读笔记

12、线程资源必须由线程池来提供,线程池使用ThreadPoolExecutor创建,SimpleDateFormat定义为static变量时加锁

《Java开发手册》阅读笔记

13、必须回收自定义的 ThreadLocal 变量,尽量在代理中使用 try-finally 块进行回收。

《Java开发手册》阅读笔记

14、考虑锁的性能,尽可能使加锁的代码块工作量尽可能的小;保持加锁顺序一致

《Java开发手册》阅读笔记

15、在使用阻塞等待获取锁的方式中,必须在 try 代码块之外,并且在加锁方法与 try 代 码块之间没有任何可能抛出异常的方法调用

《Java开发手册》阅读笔记

16、在使用尝试机制来获取锁的方式中,进入业务代码块之前,必须先判断当前线程是 否持有锁。锁的释放规则与锁的阻塞等待方式相同。

说明:Lock 对象的 unlock 方法在执行时,它会调用 AQS 的 tryRelease 方法(取决于具体实现类),如果

当前线程不持有锁,则抛出 IllegalMonitorStateException 异常。

例子:

Lock lock = new XxxLock(); // ... 
boolean isLocked = lock.tryLock(); 
if (isLocked) { 
    try {
      doSomething();
      doOthers();
    } finally {
        lock.unlock();
    }
}

17、并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存 加锁,要么在数据库层使用乐观锁,使用 version 作为更新依据。

如果每次访问冲突概率小于 20%,推荐使用乐观锁;

否则使用悲观锁。乐观锁的重试次数不得小于 3 次。

《Java开发手册》阅读笔记

18、多线程并行处理定时任务时,Timer 运行多个 TimeTask 时,只要其中之一没有捕获 抛出的异常,其它任务便会自动终止运行,如果在处理定时任务时使用ScheduledExecutorService 则没有这个问题。

《Java开发手册》阅读笔记

19、资金相关信息建议使用悲观锁,使用CountDownLatch进行异步转同步操作确保countDown方法被执行,多线程情况下建议使用ThreadLocalRandom

《Java开发手册》阅读笔记

20、多线程HashMap高并发可能出现死链,ThreadLocal不能解决共享对象更新问题

《Java开发手册》阅读笔记

更多文章:爱敲代码的小游子

本文地址:https://blog.csdn.net/qq_44895397/article/details/110424595