我在包pak
中有两个java文件file1和file2文件1:
package pak;
public class file1 {
public static int x=432;
public static void main(String[] args){
System.out.println("y is "+file2.y);
while(x==432) {
System.out.println("x is "+file1.x);
}
}
}
文件2:
package pak;
public class file2 {
public static int y=46;
public static void main(String[] args){
System.out.println("x is "+file1.x);
++file1.x;
System.out.println("x is "+file1.x);
}
}
我将运行第一个file1并且它将运行,当我从另一个shell运行文件2时,它应该增加x值,它应该在文件1中循环出来 可以请一些人帮助我吗?
答案 0 :(得分:2)
它不会以这么简单的方式工作。你要么
main
方法中的代码,(并且还需要为此file1.x
volatile
声明工作),或file1.x
副本,因此对另一个进行修改将不会显示在另一个进程中。答案 1 :(得分:0)
您正在调用两个不同的jvm进程。这两个流程都有自己的file1
和file2
副本。其他过程不会看到一个过程中静态变量的变化。
答案 2 :(得分:0)
我将运行杀死iostat.java中的进程的killjava,并且在杀死之前我需要执行一个操作
您可以使用关机挂钩执行此操作。
public static void main(String... args) throws InterruptedException {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Final stats");
}
}));
System.out.println("PID " + ManagementFactory.getRuntimeMXBean().getName());
while (true) {
System.out.println("stats");
Thread.sleep(2000);
}
}
打印
PID 29490@plus-dev-01
stats
stats
stats
stats
stats
Final stats
在另一个窗口中运行kill 29490
后,最后一行出现了。
我将如何为两个不同的流程做到这一点
这是一个复杂的答案,有太多可能的解决方案。 (共享内存,JMS,RMI,信号,套接字,IPC等)
一般来说,这是作为高级概念完成的,例如“停止过程”而不是“递增x”,即使结果是相同的。
问题在于,作为一个高级主题,您需要很好地理解进程间通信才能理解完整的答案。
简单的解决方案是;不要这样做,找到另一种方法来做你想做的事。