最近关于多线程的疑惑
最近看了点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版,还是个业余的天文学家,自己以这个为职业,为撒差距这么大.想想每天自己的写的一些代码,在一些开源的项目面前真的是上不了台面~~~不知道大伙有没有这个感觉
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版,还是个业余的天文学家,自己以这个为职业,为撒差距这么大.想想每天自己的写的一些代码,在一些开源的项目面前真的是上不了台面~~~不知道大伙有没有这个感觉
...全文
相关推荐
k-nearest:Java中K-最近邻机器学习算法的多线程实现
k-最近 K-最近邻机器学习算法在 Java 中的多线程实现。
二叉树最近最近公共祖先
Java语言,通过栈的方法建立二叉树,递归求最近共同祖先结点
最近邻分类器Matlab实现
最近邻分类器 1NN分类器 Matlab 在小样本人脸识别里,最近邻分类器似乎比KNN,贝叶斯分类器还要好。
02、最近点对问题_最近点问题_
随机生成焊点,并动态演示求最近点问题,来判断焊盘的熔断,以及数据库的重现,日志记录等一系列的操作。设计到界面操作,线程进程,数据库操作,文件操作,界面绘画等等。
最近点对算法的最近点对问题
C++最近点对问题,蛮力算法和分治算法,分治法:遵循分治思路方法利用递归求出左子集和右子集最近点对然后再对两子集的间点对进步分析比较最后求出整个点集最近点对


非技术区
