栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java是System.out.println的多线程输出是否交错

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java是System.out.println的多线程输出是否交错

由于API文档没有提及System.out对象的线程安全性,因此该PrintStream#println(String)方法 也不能假定它是线程安全的。

但是,特定JVM的基础实现完全有可能对该

println
方法使用线程安全函数(例如
printf glibc
),这样,实际上,将按照你的第一个示例保证输出(始终
ABCn
如此
ABCn
,永远不要散布字符)根据你的第二个示例)。但是请记住,有许多JVM实现,它们仅需遵守JVM规范,而无需遵循该规范之外的任何约定。

如果你绝对必须确保任何println调用都不会像你描述的那样散布,那么你必须手动强制执行互斥,例如:

public void safePrintln(String s) {  synchronized (System.out) {    System.out.println(s);  }}

当然,该示例仅是示例,而不应视为“解决方案”。还有许多其他因素需要考虑。例如,

safePrintln(...)
仅当所有代码都使用该方法并且没有
System.out.println(...)
直接调用任何方法时,以上方法才是安全的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号