最近关于多线程的疑惑
最近看了点MAPDB源码,好看的不是很懂,有点迷糊,也感慨,人家一个人就可以写出
final protected AtomicBoolean shutdownHappened = new AtomicBoolean(false);
final Runnable hookRunnable = new Runnable() {
@Override
public void run() {
shutdownHappened.set(true);
CloseOnJVMShutdown.this.hook = null;
if(CloseOnJVMShutdown.this.isClosed())
return;
CloseOnJVMShutdown.this.close();
}
};
Thread hook;
public CloseOnJVMShutdown(Engine engine) {
super(engine);
hook = new Thread(hookRunnable,"MapDB shutdown hook");
Runtime.getRuntime().addShutdownHook(hook);
}
@Override
public void close() {
super.close();
if(!shutdownHappened.get() && hook!=null){
Runtime.getRuntime().removeShutdownHook(hook);
}
hook = null;
}
多线程中对变量状态的控制,了解到作者对多线程理解的深刻
@Override
public V get(final Object o){
if(o==null) return null;
final int h = hash(o);
final int segment = h >>>28;
final Lock lock = expireAccessFlag ? segmentLocks[segment].writeLock() : segmentLocks[segment].readLock();
lock.lock();
LinkedNode<K,V> ln;
try{
ln = getInner(o, h, segment);
if(ln==null) return null;
if(expireAccessFlag) expireLinkBump(segment,ln.expireLinkNodeRecid,true);
}finally {
lock.unlock();
}
if(valueCreator==null|| ln.value!=null) return ln.value;
V value = valueCreator.run((K) o);
V prevVal = putIfAbsent((K) o,value);
if(prevVal!=null) return prevVal;
return value;
} 可能自己比较菜吧(大牛不要见笑,开发中没见过什么有技术含量的代码),从来没在实际中写过多线程的应用,哎,想想MAPDB的作者,一个人写出一个redis的java版,还是个业余的天文学家,自己以这个为职业,为撒差距这么大.想想每天自己的写的一些代码,在一些开源的项目面前真的是上不了台面~~~不知道大伙有没有这个感觉