2012-03-14 2 views
0

자바 정적 변수

파일 1 패키지 박에 다음과 같이 내가 두 개의 자바 파일 파일 1과 파일 2가 :

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를 실행하고 것이다 실행 중이고 다른 쉘에서 파일 2를 실행할 때 x 값을 증가시켜야하고 파일 1의 루프에서 벗어나야합니다. 어떤 사람이 나를 도와 줄 수 있습니까 ??????

+0

* 프로세스 간 통신 * (IPC)에 대해 알아야합니다. 간단하게하려고하는 것이 아닙니다. – Nim

+0

당신은 2 쉘을 사용한다고 말할 때 ...그것은 또한 당신이 2 개의 분리 된 과정을 가지고 있다는 것을 의미합니다, 맞습니까? 이 경우 정적 변수는 file1과 file2간에 공유되지 않습니다. –

+0

그렇다면 어떻게해야합니까? 다른 방법으로는 어떻게해야합니까 ?? –

답변

0

내가 iostat.java의 과정을 죽이고 그냥 하나 개의 동작을

를 수행 할 필요가 사망하기 전에 종료 훅이 작업을 수행 할 수 있습니다 killjava를 실행합니다. 내가 다른 창에서 kill 29490를 실행 한 후

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 [email protected] 
stats 
stats 
stats 
stats 
stats 
Final stats 

마지막 줄은 발생합니다.


내가 두 개의 서로 다른 프로세스

이 언급 너무 많은 가능한 솔루션으로 복잡한 대답을 위해 그것을 어떻게 할 것입니다. (공유 메모리, JMS, RMI, 신호, 소켓, IPC 등)

일반적으로 결과가 같더라도 "increment x"가 아닌 "stop process"와 같은 상위 개념으로 수행됩니다.

고급 주제로 전체 답변을 이해하려면 프로세스 간 의사 소통을 잘 이해해야합니다.

간단한 해결책은 다음과 같습니다. 그것을하지 않으면, 당신이 원하는 것을하는 또 다른 방법을 찾으십시오.

+0

그렇지 어떤 간단한 방법으로 가능하다을 ?? –

+0

하나의 JVM을 사용하는 간단한 방법이 있습니다. ;) 당신의 예제에서 여러 프로세스를 사용하려는 이유가 명확하지 않습니다. –

+0

실제로 내 프로젝트에서 iostat.java를 하나의 쉘에서 실행합니다 ... 로그를 생성합니다 ... 그리고 다른 쉘에서 iostat.java의 프로세스를 강제 종료하는 killjava를 실행하고 하나만 수행해야합니다. 액션 (예 : 로그 평균, 최소, 최대)을 하나의 CSV 파일에 기록하십시오 .... –

2

이렇게 간단한 방법으로는 작동하지 않습니다. 어느 쪽이든 당신

  • 실행 동일한 프로세스 내에서 두 개의 별개의 스레드에서 두 main 방법 내 현재 코드 (즉, 자바 응용 프로그램), (그리고 당신도 작동이에 대한 file1.xvolatile을 선언 할 필요), 또는
  • 위에서 설명한대로 두 개의 별개의 프로세스를 실행해야하지만, 서로 통신 할 필요가 있습니다. 그렇지 않으면 두 프로세스는 각각 file1.x의 자체 사본을 가지므로 하나의 수정이 다른 것에 대해 보이지 않습니다.
+0

내가 두 개의 서로 다른 프로세스 –

+0

님이 언급 한 바와 같이 위해 그것을 할 방법,이 프로세스 간 통신 (IPC)라는 주제입니다. 필자는 직접 경험이 없으므로 몇 가지 링크를 제공하는 것 이상으로 도움을 줄 수는 없습니다. http://docs.oracle.com/javase/tutorial/rmi/index.html, http://publib.boulder.ibm. COM/센터/i 시리즈/V5R4/index.jsp를? 주제 = % 2Frzaha % 2Finterpro.htm, http://stackoverflow.com/questions/1416780/java-interprocess-communication –

0

두 개의 서로 다른 jvm 프로세스를 호출하고 있습니다. 두 프로세스 모두 자체 복사본 file1file2을 갖습니다. 한 프로세스 내의 정적 변수의 변경은 다른 프로세스에서 볼 수 없습니다.