2017-09-27 4 views
0

すべての文字列置換をExecutorServiceで印刷したいのですが、単一スレッドで実行するよりも高速ではありません。Java文字列置換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第 マイコンピュータ:8 GBの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つのタスクしか提出していないとご存じでしょうか?したがって、エグゼキュータ内の他のスレッドはすべてアイドル状態のままです。 –

答えて

1

これはForkJoinPoolの良い候補のようです。タスク内で、複数のスレッド間でさまざまな子タスクをフォークすることができます。これはあなたの意図です。