Java- 并发编程 注意事项

一、ConcurrentHashMap 使用注意事项

put 方法判断如果 key 已经存在,则使用 value 覆盖原来的值并返回原来的值,如果不存在则把 value 放入并返回 null。而 putIfAbsent 方法则是如果 key 已经存在则直接返回原来对应的值并不使用 value 覆盖,如果 key 不存在则放入 value 并返回 null,另外要注意,判断 key 是否存在和放入是原子性操作。

 

二、ThreadPoolExecutor 线程池

线程池主要解决两个问题:

1、当执行大量异步任务时,线程池能够提供较好的性能。线程池里面的线程是可复用的,不需要每次执行异步任务时都重新创建和销毁线程。

2、线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等。

 

三、ThreadLocal

ThreadLocal 是 JDK 包提供的,它提供了线程本地变量,也就是你创建了一个 ThreadLocal  变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个 ThreadLocal 变量后,每个线程都会复制一个变量到自己的本地内存。

ThreadLocal  使用完毕后及时调用 remove 方法解决内存泄漏问题。

 

四、SimpleDateFormat

SimpleDateFormat 是线程不安全的,因为 Calender 是线程不安全的。

使用 ThreadLocal  解决 SimpleDateFormat  线程不安全的问题,打打节省对象的创建销毁开销,并且不需要使多个线程同步。

 

你可能感兴趣的:(Java基础学习,经验总结)