https://api.vvhan.com/api/avatar/boy

技术博客分享

JavaEE_多线程二

锁对象是谁并不重要,重要的是通过这个对象来区分两个线程是否竞争同一个锁,如果两个线程针对同一个对象进行加锁,就会产生锁竞争,一旦产生竞争,一个线程能拿到锁继续执行代码,一个线程拿不到锁,就只能阻塞等待,等前一个线程释放锁之后,他才有机会拿到锁。共享变量存在于主内存中, 每一个线程都有自己的工作内存,当线程要读取一个共享变量的时候,会先把变量从主内存拷贝到工作内存,再从工作内存读取数据,当线程要修改一个共享变量的时候,也会先修改工作内存的副本,再同步回主内存。

C手动实现一个线性探测法HashMap

所以线性探测的一个突出问题是:平均插入成本的成长幅度,远高于负载系数的成长幅度,这样的现象在hashing过程中称为主集团primary clustering(此时我们手上有的是一大团已被用过的方格,插入操作极有可能在主集团所形成的泥泞中奋力爬行,不断解决碰撞问题)。当散列函数计算出某个元素的插入位置,而该位置上的空间已不再可用时,最简单的办法就是循序往下一一寻找,直到找到一个可用空间为止,只要表格array足够大,总是能找到一个安身立命的空间,但是要花多少时间就很难说了。