首页 > Java > java教程 > System.out.println() 在多线程 Java 中是线程安全的吗?

System.out.println() 在多线程 Java 中是线程安全的吗?

Mary-Kate Olsen
发布: 2024-12-07 13:52:12
原创
759 人浏览过

Is System.out.println() Thread-Safe in Multithreaded Java?

多线程 System.out.println() 交错:线程安全困境

问题出现:可以从 System.out 输出如果没有同步,多线程的 .println(String) 会交错?

API 仍然存在对线程安全保持沉默,留下了怀疑的空间。虽然交错输出在理论上是可行的,但由于缓冲、内存模型或 JVM 实现的原因,实际情况可能会有所不同。

例如,如果每个线程都执行 System.out.println("ABC"),则可能会期望输出为“ABCnABC”,表示没有交错。然而,“AABCnBC”也是合理的。

解决难题

API 文档不保证 System.out 的线程安全,这意味着可以进行交错。尽管如此,一些 JVM 实现可能会利用 println 中的线程安全机制(如 glibc 的 printf),以确保输出保真度。

但是,依赖 JVM 特定的实现是有风险的。为了确保完整的输出完整性,需要手动互斥:

public void safePrintln(String s) {
  synchronized (System.out) {
    System.out.println(s);
  }
}
登录后复制

请注意,只有在所有代码一致使用 safePrintln 并避免直接调用 System.out.println 时,这才会防止交错。

以上是System.out.println() 在多线程 Java 中是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板