最近关于多线程的疑惑

ShirokiInCS ShirokiInCS 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近看了点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版,还是个业余的天文学家,自己以这个为职业,为撒差距这么大.想想每天自己的写的一些代码,在一些开源的项目面前真的是上不了台面~~~不知道大伙有没有这个感觉
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
ShirokiInCS
非技术区 23,404 成员 70,506 内容