首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认情况下,Java的System.out.println()方法是否与线程相互排斥?

默认情况下,Java的System.out.println()方法是否与线程相互排斥?
EN

Stack Overflow用户
提问于 2014-09-27 20:17:12
回答 3查看 797关注 0票数 0

还是需要锁才能将同步输出打印到屏幕上?

例如:

代码语言:javascript
运行
复制
//Main
public static void main(String[] args) {
   MyThread myThread1 = new MyThread();
   MyThread myThread2 = new MyThread();

   Thread thread1 = new Thread(myThread1);
   Thread thread2 = new Thread(myThread2);

   thread1.start();
   thread2.start();
}

//Custom thread 
public class MyThread() {
   public void run() {
      System.out.println("Is this method a shared resource that needs to be locked?");
   }
}

上述情况会否受到种族情况的影响?或者System.out.println()是用同步实现的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-27 21:26:09

由于println在该实例上是同步的,因此几乎不可能发生流自损坏的情况。

但是,如果您有不同的线程打印不同的东西,那么您可能会看到不确定的行为,因为您认为要打印的事物的顺序并不是它们实际的顺序。这是一个单独的关注,真正的腐败,你要写的流。

票数 0
EN

Stack Overflow用户

发布于 2014-09-28 12:43:08

Makoto的回答都是正确的,但这并不是全部的事实。java.io.PrintStream的文档没有提到线程。在同一流上对print(...)方法的重叠调用的行为是未定义的。

您能容忍代码中未定义的行为吗?通常情况下,经过充分的测试,答案是肯定的。但是,如果代码中的一个bug可能威胁到人们的生命,威胁到某家大公司的财务状况,威胁到一次历史性太空任务的成功,那么依赖不明确的行为可能是一种职业限制。

票数 1
EN

Stack Overflow用户

发布于 2014-09-27 21:17:06

是的,有个威胁说你会进入比赛状态.部分消息将由一个线程写出。

解决方案是使用像log4j这样的记录器。看看这个教程

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26078825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档