2012-09-07 6 views
0

로컬 디스크에 여러 번 저장된 jar 파일을 실행하고 싶습니다. jar 파일은 주어진 인스턴스에서 여러 번 실행되어야합니다. 모든 jar 파일 (동일한 파일)이 함께 실행되어야합니다. 내가 할 수있는 방법이 있습니까? 다중 스레드를 생성하는 코드를 작성해야합니까?동일한 jar 파일을 동시에 여러 번 실행하기

지금 당분간 나는 많은 명령 프롬프트를 열고 cmd를 separetly에서 jar를 호출하므로 동시에 실행합니다. 그러나 이것은 효율적인 방법은 아닙니다. 이 작업을 수행하는보다 효율적인 방법이 있습니까?

도움이 될 것입니다.

+2

는 "효율적", "동시에", "함께"정의합니다. –

+0

@Tichodroma Simultaneously : 모든 jar 파일이 동일한 인스턴스에서 실행 중일 때. 함께 : 그것은 위의 게시물에서 동시에 유사합니다. 효율적인 : 20-30 cmd 창을 열 수 없으며 별도로 실행할 수 있습니다. 프로세서에 부하가 큽니다. – Spaniard89

+0

몇 개의 CPU가 있습니까? 8 개의 코어가 있고 각 프로세스가 1-2 개의 CPU를 사용하는 경우 4-8을 실행하는 것이 최상의 솔루션이라는 것을 알 수 있습니다. –

답변

1

나는 당신이 그 방법 (20 ~ 30) -1의 JVM의 오버 헤드가 프로세서

에, 무거운 부하를 20 ~ 30 cmd를 창을 열고 개별적으로 실행할 수 없습니다. 이 같은 두 번째 메인 클래스를 만들 수 있습니다

public static void main(final String[] args) { 
    int numberOfSimultaneousExecutions = 25; 
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions); 
    for (int i = 0; i < numberOfSimultaneousExecutions; i++) { 
     executor.execute(new Runnable() { 
      @Override 
      public void run() { 
       RealMainClass.main(args); 
      } 
     }); 
    } 
} 

는 이제 JAR이 JVM에서 동시에 실행됩니다.

그러나 위험합니다. 코드가 공유 된 정적 값에 액세스 (및 수정)하면 응용 프로그램 거의 확실하게입니다.

또한 인수에서 동시 실행의 수를 취할 수 있습니다

public static void main(final String[] argsWithNum) { 
    int numberOfSimultaneousExecutions = Integer.parseInt(argsWithNum[0]); 
    final String[] args = new String[argsWithNum.length - 1]; 
    System.arraycopy(argsWithNum, 1, args, 0, args.length); 
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions); 
    ... 
+0

이 코드를 메인 클래스에 삽입해야합니까? 만약 내가 그렇게한다면, 수업은 어떻게 두 개의 메인을 축적 할 수 있습니까? – Spaniard89

+1

@Kishorepandey 아니요, main 메소드를 사용하여 ** 두 번째 기본 클래스를 만들고 코드의 RealMainClass를 일반 기본 클래스의 이름으로 바꿔야합니다. –

+0

나는 미안하다. 나는 그것을 얻었다. RealMainclass는 내가 여러 번 실행하고자하는 클래스의 이름입니다! – Spaniard89

0

뭔가를 실행하려면 스레드가 필요합니다. 동시에 여러 번 실행하려면 여러 스레드가 필요합니다. 모든 코드가 쓰레드에 안전하도록 작성된 것은 아니므로 코드를 올바르게 확인해야합니다.

+0

어떻게 확인하고 어떻게 여러 스레드를 만들 수 있습니까? – Spaniard89

+0

저는 ExecutorService (자세한 내용은 google)에 작업을 제출합니다. 코드가 스레드로부터 안전한지 확인하는 유일한 방법은 설명서를 읽는 것입니다. 그렇다고하지 않으면 코드가 어떻게 작동하는지 확인하십시오. 여러 프로세스를 실행하는 것이 가장 간단한 해결책 일 수 있습니다. –

관련 문제