最近关于多线程的疑惑

ShirokiInCS 2014-02-25 07:35:10
最近看了点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版,还是个业余的天文学家,自己以这个为职业,为撒差距这么大.想想每天自己的写的一些代码,在一些开源的项目面前真的是上不了台面~~~不知道大伙有没有这个感觉
...全文
2302 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
teemai 2014-02-26
  • 打赏
  • 举报
回复
其实很多大牛都是跨专业的人才。
Defonds 2014-02-26
  • 打赏
  • 举报
回复
这个也正常。 人家从娃娃抓起,国内大都是上了大学才开始接触。

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧