Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf()?_Java - Fatal编程技术网

为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf()?

为什么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

为什么PrintStream.java中的println(Object x)方法从同步块外部调用String.valueOf()

为什么不使用现有打印(对象obj)

对于性能?

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实例上同步,第二个对象在第一个实例上同步。然后有两个线程,其中一个将第一个对象打印到第一个打印流,第二个将第二个对象打印到第二个打印流。