02 2019 档案
摘要:题外话:为什么要hashcode进行spread? 充分使用key.hashCode()的高16位信息,保证hash分布更分散, 扩容操作是新建2倍于原表大小的新表,并将原表结点拷贝一份放在新表中,对原表无修改或修改很小。当原表所有结点都已被拷贝到新表中后,原表会被垃圾回收。 在jdk7中的Hash
阅读全文
摘要:jdk7_ConcurrentHashMap初始化图示 jdk7_ConcurrentHashMap_put和get操作_扩容_线程安全的分析
阅读全文
摘要:1 package proxy.dynamicproxy; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 7 8 /** 9 * 需要实现InvocationHandler接口,内...
阅读全文
摘要:1 package proxy.staticproxy; 2 3 public interface IStar { 4 5 public void sing(); 6 } 1 package proxy.staticproxy; 2 3 public class RealStar implements IStar{ 4 @Override 5 public vo...
阅读全文
摘要:1 package reentrantlock; 2 3 import java.util.ArrayList; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 public class TestFairSyn { 7 8 public static void main(String[] args) { ...
阅读全文
摘要:跑通上面的例子可以得到一些总结: 1、在生产者-消费者模式下,消费者线程和生产者线程都在抢占cpu,谁抢到cpu谁就得到执行。抢不到的会进入AQS队列。 此时如果有多个线程在抢占不到cpu进入AQS队列时,进入AQS队列的顺序是不可预知的(比如恰好经历线程切换), 但可以保证的是: 一旦在AQS队列
阅读全文