[英]java static variables
我在包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中循環出來可以有一個人請幫助我??????
它不會以這么簡單的方式工作。 不管你
main
方法中的代碼,(並且還需要聲明file1.x
volatile
以使其工作),或者 file1.x
副本,因此對file1.x
進行修改將不可見。 您正在調用兩個不同的jvm進程。 這兩個進程都有自己的file1
和file2
副本。 其他過程不會看到一個過程中靜態變量的變化。
我將運行殺死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”,即使結果是相同的。
問題是,作為一個高級主題,您需要很好地理解進程間通信才能理解完整的答案。
簡單的解決方案是; 不要這樣做,找到另一種方法來做你想做的事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.