Java练习题
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<Lock, Map<String, Counter>>[] 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<String, Counter>());
}
}
public Pair<Lock, Map<String, Counter>> 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<Left, Right> {
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>[]();

浙公网安备 33010602011771号