1.实现一个类似于ConcurrentHashMap的分段加锁
import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class SegmentLock { private static final int DEFAULT_INITIAL_CAPACITY = 16; private static final int MAXIMUM_CAPACITY = 1 << 30; private static final int MAX_SEGMENTS = 1 << 16; // slightly conservative final int segmentMask; final int segmentShift; private Pair>[] segmentLocks; public SegmentLock(final int concurrentLevel) { int size = 1; int shift = 0; while (size < concurrentLevel) { size <<= 1; shift += 1; } segmentMask = size; segmentShift = 32 - shift; for (int i = 0; i < size; i++) { segmentLocks[i] = new Pair(new ReentrantLock(), new HashMap ()); } } public Pair > get(final String key) { return segmentLocks[(hash(key.hashCode()) >> segmentShift) & segmentMask]; } private static int hash(int h) { h += (h << 15) ^ 0xffffcd7d; h ^= (h >>> 10); h += (h << 3); h ^= (h >>> 6); h += (h << 2) + (h << 14); return h ^ (h >>> 16); } static class Pair { private final Left left; private final Right right; public Pair(final Left left, final Right right) { this.left = left; this.right = right; } } static class Counter { private int count; public int increaseAndGet() { return ++count; } public int decreaseAndGet() { return --count; } public int get() { return count; } }}
2.怎样初始化一个泛型数组?
new ArrayList<String>[]();