解决多线程访问数据冲突的问题

传统的方法 加Synchronized关键字,也就是所谓的加锁,只有拿到锁的线程才能操作该数据,这是所谓的让线程等待、牺牲时间的方法。

还有一种方法也能解决这个问题,Java中有一个ThreadLocal类 该类在源码中的描述为当前线程独有的一个存储类,可以在指定线程内存储数据。通过阅读源码之后发现有一个静态内部类ThreadLocalMap。该类为当前线程维护了一个数组Table(一个线程都拥有一个map,一个map维护一个Table),当前线程只能访问到属于自己的数组Table。 通过hashCode与length位运算确定出一个索引值i,这个i就是被存储在table数组中的位置(一个线程只有一个ThreadLocalMap,一个Map只有一个Table,但是一个Table可能有许多个ThreadLocal,通过算法确定ThreadLocal的索引)。这是牺牲空间换取时间的方法。

不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/13164089.html