zoukankan      html  css  js  c++  java
  • 解决多线程访问数据冲突的问题

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

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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Codeforces Beta Round #6 (Div. 2 Only)
    Codeforces Beta Round #5
    Codeforces Beta Round #4 (Div. 2 Only)
    Codeforces Beta Round #3
    Codeforces Beta Round #2
    Codeforces Beta Round #1
    HDU 4020 Ads Proposal
    SRM 615 DIV1 500
    求1+2+……+n(位运算)
    好好加油!
  • 原文地址:https://www.cnblogs.com/Vinlen/p/13164089.html
Copyright © 2011-2022 走看看