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


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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM