小编dro*_*ean的帖子

JVM核心线程

在我的机器上启动JVM实例时,有一个运行无限睡眠的简单类main(),我在JVM中看到了四个关键线程(除了主线程):

  1. 附加监听器
  2. 参考处理程序
  3. 终结
  4. 信号调度员
  5. DestroyJavaVM

我很想知道每个核心JVM线程的用途.通过快速的互联网搜索,我在这些主题上找到了以下详细信息:

  1. 附加侦听器:动态附加在目标JVM中具有附加侦听器线程.这是在第一个附加请求发生时启动的线程.
  2. 信号调度程序:当操作系统向JVM发出信号时,信号调度程序线程会将信号传递给适当的处理程序.
  3. 引用处理程序:用于将待处理引用排入队列的高优先级线程.GC创建一个简单的链接引用列表,需要进行处理,并且该线程会快速将它们添加到正确的队列中,并通知ReferenceQueue侦听器.
  4. Finalizer:Finalizer线程调用终结器方法.
  5. DestroyJavaVM:该线程在程序退出时卸载Java VM.大多数时候它应该等待.

我想了解这些线程和参考文档(如果已知)的更多细节(或理解上的更正).

java multithreading jvm

8
推荐指数
1
解决办法
2355
查看次数

为什么Thread join()在它击败线程viz并发的唯一目的时是有用的

由于线程连接导致逻辑的顺序执行,首先在多个线程之间划分任务的动机是什么?换句话说,我无法想象一个真正需要线程连接的场景.

multithreading

5
推荐指数
1
解决办法
375
查看次数

AtomicBoolean真的实现了原子性吗?

我理解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'提供原子性,并且必须使用同步/锁定机制来实现完整的原子性.因此,上面经常引用的流行用例并不是真正的原子!!

java multithreading atomicity

1
推荐指数
1
解决办法
260
查看次数

标签 统计

multithreading ×3

java ×2

atomicity ×1

jvm ×1