public class Server {
private static boolean msgForAlice=false;
private static boolean msgForBob=false;
public static void shouldAliceWait() {
System.out.println(msgForAlice);
System.out.println(msgForBob);
}
public static void main(String[] args) {
System.out.println("Before:");
System.out.println(msgForAlice);
System.out.println(msgForBob);
try {
Thread.sleep(2000);
}catch(Exception e) {
e.printStackTrace();
}
msgForBob=true;
System.out.println("After:");
System.out.println(msgForAlice);
System.out.println(msgForBob);
try {
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
console.readLine();
}catch(Exception e) {
e.printStackTrace()
}}
public class Test {
public static void main(String[] args) {
Server.shouldAliceWait();
}
}
当Test类的main方法被调用,而Server的main方法正被readLine((调用阻塞时,我从Server的静态字段中得到了不寻常的值:
Server:
Before:
false
false
After:
false
true
Test:
false
false
有人能给我解释一下吗?
这很简单:在Java中,您只能运行一个起点(main
方法(。如果您有两个main
方法,并且您正在运行每一个方法,则意味着您正在运行程序的两个实例。如果您正在运行程序的两个实例,它们不会共享彼此的信息或变量。
当类Test的主方法被调用,而服务器的主方法正被readLine((调用阻塞时,我从服务器的静态字段中得到不寻常的值:
因此,如果您正在执行此操作,则意味着您必须实例化Java两次——一次是在其自己的空间中实例化第一个main
方法,另一次是也在其自己空间中实例化第二个main
方法。如果是这样的话,他们就不会分享信息。