簡體   English   中英

java靜態變量

[英]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中循環出來可以有一個人請幫助我??????

它不會以這么簡單的方式工作。 不管你

  • 從同一進程中的兩個不同線程(即Java應用程序)中運行當前在兩個main方法中的代碼,(並且還需要聲明file1.x volatile以使其工作),或者
  • 運行如上所述的兩個不同的進程,但是你需要讓它們相互通信,這遠非微不足道。 否則,每個進程都有自己的file1.x副本,因此對file1.x進行修改將不可見。

您正在調用兩個不同的jvm進程。 這兩個進程都有自己的file1file2副本。 其他過程不會看到一個過程中靜態變量的變化。

我將運行殺死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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM