可以使线程在等待锁的时候响应中断
可以让线程尝试获取锁,并在法获取锁的时候即返回或者等待段时间
可以在同的范围,以同的顺序获取和释放锁
20. Hashtable的size()法中明明只有条语”return count”,为么还要做同步?
1、同时间只能有条线程执固定类的同步法,但是对于类的同步法,可以多条线程同时访问。所以,这样就
有问题,可能线程A在执Hashtable的put法添加数据,线程B则可以正常调size()法读取Hashtable中当前元素
的个数,那读取到的值可能是最新的,可能线程A添加完数据,但是没有对size++,线程B就已经读取size,那
么对于线程B来说读取到的size定是准确的。
2、给size()法加同步之后,意味着线程B调size()法只有在线程A调put法完毕之后才可以调,这样就保
证线程安全性。
21. ConcurrentHashMap的并发度是么?
1、作机制(分思想):它引个“分段锁”的概念,具体可以解为把个的Map拆分成N个的segment,
根据key.hashCode()来决定把key放到哪个HashTable中。可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。
2、应:当读>写时使,适合做缓存,在程序启动时初始化,之后可以被多个线程访问;
3、hash冲突:
1、简介:HashMap中调hashCode()法来计算hashCode。由于在Java中两个同的对象可能有样的
hashCode,所以同的键可能有样hashCode,从导致冲突的产。
2、hash冲突解决:使平衡树来代替链表,当同hash中的元素数超过特定的值会由链表切换到平衡树
4、锁读:ConcurrentHashMap之所以有较好的并发性是因为ConcurrentHashMap是锁读和加锁写
,并且分
段锁(是在所有的entry上加锁,是在部分entry上加锁);
读之前会先判断count(jdk1.6),其中的count是被volatile修饰的
(当变被volatile修饰后,每次改该变的时候会将
改结果写到系统主内存中,多处的缓存致性,其他处会发现的缓存对应的内存地址被修改,就会将处
的缓存设置为失效,并强制从系统主内存获取最新的数据。),故可以实现锁读。
5、ConcurrentHashMap的并发度就是segment的,默认为16,这意味着最多同时可以有16条线程操作
ConcurrentHashMap,这也是ConcurrentHashMap对Hashtable的最优势。
22. ReentrantReadWriteLock读写锁的使?
1、读写锁:分为读锁和写锁,多个读锁互斥,读锁与写锁互斥,这是由jvm控制的,你只要上好相应的锁即可。
2、如果你的代码只读数据,可以很多同时读,但能同时写,那就上读锁
;
3、如果你的代码修改数据,只能有个在写,且能同时读取,那就上写锁
。总之,读的时候上读锁,写的时候上写
锁!
23. CyclicBarrier和CountDownLatch的法及区别?
CyclicBarrier和CountDownLatch 都位于java.util.concurrent 这个包下