理解Java中的方法同步
我知道线程同步。但是在Merlin Hughes的《Java网络编程》一书中的这段代码中,写到理解Java中的方法同步,java,outputstream,Java,Outputstream,我知道线程同步。但是在Merlin Hughes的《Java网络编程》一书中的这段代码中,写到println方法在System.out上同步。我不明白如何在System.out上同步方法 我想问的第二个问题是:println函数是一个被重写的方法,还是在这段代码中它只是一个用户定义的方法 import java.io.*; public class SimpleOut { public static void main(String[] args) throws IOExcepti
println
方法在System.out
上同步。我不明白如何在System.out
上同步方法
我想问的第二个问题是:println
函数是一个被重写的方法,还是在这段代码中它只是一个用户定义的方法
import java.io.*;
public class SimpleOut {
public static void main(String[] args) throws IOException {
for (int i = 0; i < args.length; i++) {
println (args[i]);
}
}
public static void println(String msg) throws IOException {
synchronized (System.out) {
for (int i=0 ; i<msg.length(); i++) {
System.out.write(msg.charAt (i) & 0xff);
}
System.out.write('\n');
}
System.out.flush();
}
}
import java.io.*;
公共类SimpleOut{
公共静态void main(字符串[]args)引发IOException{
对于(int i=0;i 对于(int i=0;i您可以在任何对象/实例上进行同步。out
是类java.lang.System
中声明的类变量
public final static PrintStream out
同步是在指定的“资源”~reference上进行同步的机制。System.out也是该资源。还有关于该资源的帖子链接
这也是一个很好的博客,可以让我了解java中一些更难的东西。我在有时间的时候阅读它,有很多有用的东西。你可以通过引用在任何对象上同步-为什么你会期望System.out
不同?你的代码中的println
方法不能覆盖任何东西-它是静态的…是静态的system.out对象,如果是?它是谁的对象?它是什么时候创建的?我要求println使用重写方法的原因是println是一个预定义函数,请解释什么是system.out在全局可用引用上同步,可以重新分配(使用system.setOut()
)在我看来这不是一个好主意。该方法应该使用自己的私有最终锁。@JunaidShirwani:Wellout
是系统中的一个类字段
类。您将在该字段的值所引用的对象上同步。。。