2017-09-27 2 views
0

ExecutorService를 사용하여 모든 문자열 순열을 인쇄하고 싶지만 단일 스레드에서 실행하는 것이 더 빠르지 않습니다.Java String permutation ExecutorService

내 코드 :

private static void setUpThreads(String startCharacter, char inputLength[], String withoutStartChar, int threadnumber) { 
    ExecutorService exec = Executors.newFixedThreadPool(threadnumber); 
    exec.execute(() -> permutation(startCharacter, inputLength, 0, withoutStartChar)); 
    exec.shutdown(); 
    try { 
     exec.awaitTermination(600, TimeUnit.SECONDS); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

} 

의 ThreadNumber는 결과가 내 컴퓨터에서도 동일하게 나타날 1 또는 8이 될 수 있습니다. 난 Startchar으로 테스트하십시오 inpuLength 17 withoutStartCharacter : SDF 을 결과는 동일 할 것이다 135초 내 컴퓨터 8GB의 RAM (4 코어 8 스레드)

그리고 전치 코드 i7-6700HQ :

private static void permutation(String startCharacters, char[] maxLength, int pos, String input) { 
    if (pos == maxLength.length) { 
     if (leRepetation(maxLength)) 
      System.out.println(startCharacters + new String(maxLength)); 
    } else { 
     for (int i = 0; i < inputSize; i++) { 
      maxLength[pos] = input.charAt(i); 
      permutation(startCharacters, maxLength, pos + 1, input); 
     } 
    } 
} 

어떻게하면 멀티 스레딩으로 프로세스 속도를 향상시킬 수 있습니까? 아니면 속도를 높이는 다른 방법은 없을까요?

+0

멀티 스레딩없는 속도는 무엇입니까? 초입니까? 의사록? –

+0

ExecutorService가없는 경우 135 초, ExecutorService가있는 경우 135 초 (스레드 8 개) – Davinho

+0

하나의 작업 만 제출한다는 사실을 알고 있습니까? 따라서 집행자의 다른 모든 스레드는 그냥 유휴 상태로 있습니다. –

답변

1

이것은 ForkJoinPool의 좋은 후보자처럼 보입니다. 작업 내에서 여러 스레드에서 여러 하위 작업을 포크 닝 할 수 있으며 이는 사용자의 의도라고 생각합니다.

관련 문제