在我的机器上启动JVM实例时,有一个运行无限睡眠的简单类main(),我在JVM中看到了四个关键线程(除了主线程):
我很想知道每个核心JVM线程的用途.通过快速的互联网搜索,我在这些主题上找到了以下详细信息:
我想了解这些线程和参考文档(如果已知)的更多细节(或理解上的更正).
由于线程连接导致逻辑的顺序执行,首先在多个线程之间划分任务的动机是什么?换句话说,我无法想象一个真正需要线程连接的场景.
我理解AtomicInteger的有效用例,但我对AtomicBoolean如何保证,保证两个动作的原子性i.'改变布尔值'和ii.在以下经常引用的AtomicBoolean变量atomicInitialized的用例中执行'one-time-logic',例如initialize():
if (atomicInitialized.compareAndSet(false, true)) {
initialize();
}
Run Code Online (Sandbox Code Playgroud)
此操作将首先将atomicInitialized设置为true(如果为false),然后执行不安全的intialize().它将保证initialize()仅被调用一次,但是第一个线程完成初始化之后,第二个调用getAndSet()的线程不会被延迟.因此,AtomicBoolean虽然在更新布尔值时提供原子性,但并不真正为整个'if-block'提供原子性,并且必须使用同步/锁定机制来实现完整的原子性.因此,上面经常引用的流行用例并不是真正的原子!!