我知道基于这个链接http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html,没有volatile变量的双重检查锁定是不安全的
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在家用电脑上模拟这种情况.我有标准的jdk1.7和多核处理器.但我无法模拟破碎的行为.我正在使用这个测试http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckTest.java来模拟这个.我也创建了一些测试,但没有成功.你知道如何在没有volatile的双重检查成语被打破的情况下模拟情况吗?所以它返回部分创建的Helper类.
我们正在WebSphere集群中部署应用程序.应用程序正在运行他自己的永不终止的线程,正在检查某些条件,例如:
while(true){
logger.severe("Unterminated thread");
Thread.sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)
问题是,在WebSphere中停止应用程序(通过wsadmin或管理控制台)之后,只有servlet被取消注册,但这些线程不会被杀死并且仍然在运行.当我停止申请时,有什么方法可以杀死这个踏板吗?我们正在使用WebSphere 7.
谢谢
我正在使用-Xlog:safepoint+stats=debug:file=safepoint.log vm 参数在JDK12上运行应用程序以记录安全点操作并使用 ZGC 运行。我有理解日志输出的问题:
[1408.417s][debug][safepoint,stats] vmop [ threads: total initially_running wait_to_block ][ time: spin block sync cleanup vmop ] page_trap_count
[1412.164s][debug][safepoint,stats] 1412.162: ZOperation [ 376 0 7 ][ 0 0 0 0 1 ] 7
[1413.164s][debug][safepoint,stats] 1413.164: None [ 376 0 0 ][ 0 0 0 0 0 ] 0
[1414.165s][debug][safepoint,stats] 1414.164: None [ 376 0 1 ][ 0 0 0 0 0 ] 1
Run Code Online (Sandbox Code Playgroud)
我知道第一行告诉 ZOperation 花费了 1 毫秒,并且有 7 个线程参与了阻塞。
我不明白第二行,什么是“None” vmop 操作?看起来那个操作的持续时间是 …