为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf()?
为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf() 为什么不使用现有打印(对象obj) 对于性能?为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf()?,java,Java,为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf() 为什么不使用现有打印(对象obj) 对于性能?String.valueOf(x)调用x上的toString()方法。此方法的实现可以执行任何操作,包括在此或其他PrintStream实例上进行同步。为了避免死锁,需要在锁之外调用String.valueOf() print方法不能重复使用,因为断线需要在对象之后立即打印,即使有其他线程将其他数据写入同一PrintStr
String.valueOf(x)
调用x
上的toString()
方法。此方法的实现可以执行任何操作,包括在此或其他PrintStream
实例上进行同步。为了避免死锁,需要在锁之外调用String.valueOf()
print
方法不能重复使用,因为断线需要在对象之后立即打印,即使有其他线程将其他数据写入同一PrintStream
。为了实现这一点,print
和newLine
从synchronized
块中调用。String.valueOf(x)
调用x
上的toString()
方法。此方法的实现可以执行任何操作,包括在此或其他PrintStream
实例上进行同步。为了避免死锁,需要在锁之外调用String.valueOf()
print
方法不能重复使用,因为断线需要在对象之后立即打印,即使有其他线程将其他数据写入同一PrintStream
。为了实现这一点,print
和newLine
从synchronized
块中调用。String s=String.valueOf(x)
是一种只读操作,不需要在同步块中。为了避免由于锁定而导致的等待时间,不需要同步的所有内容都应该在同步块之外。是的,这是为了性能。没有理由在synchronized
块中调用它。该块仅用于保护写入程序自己的缓冲区和底层流。它与正在打印的对象没有任何关系。这些块应尽可能短。String s=String.valueOf(x)
是一种只读操作,不需要在同步块中。为了避免由于锁定而导致的等待时间,不需要同步的所有内容都应该在同步块之外。是的,这是为了性能。没有理由在synchronized
块中调用它。该块仅用于保护写入程序自己的缓冲区和底层流。它与正在打印的对象没有任何关系。这些块应该尽可能短。谢谢你的回答。我需要进一步了解的帮助。与在同步块中调用String.valueOf()等静态方法的情况相同。您能告诉我在哪种情况下会发生死锁吗?假设您有两个PrintStream实例和两个具有自定义toString()实现的对象。第一个对象在第二个PrintStream实例上同步,第二个对象在第一个实例上同步。然后有两个线程,其中一个将第一个对象打印到第一个打印流,第二个将第二个对象打印到第二个打印流。谢谢您的回答。我需要进一步了解的帮助。与在同步块中调用String.valueOf()等静态方法的情况相同。您能告诉我在哪种情况下会发生死锁吗?假设您有两个PrintStream实例和两个具有自定义toString()实现的对象。第一个对象在第二个PrintStream实例上同步,第二个对象在第一个实例上同步。然后有两个线程,其中一个将第一个对象打印到第一个打印流,第二个将第二个对象打印到第二个打印流。