Java 字符串置换ExecutorService

标签 java string algorithm 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 测试了它:a inpuLength: 17 withoutStartCharacter : sdf 结果将是相同的:135 秒 我的电脑:i7-6700HQ,内存8GB(4核8线程)

和排列代码:

   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);
        }
    }
}

我可以通过多线程以某种方式加快进程吗?或者任何其他加快速度的方法?

最佳答案

这看起来很适合 ForkJoinPool .在一个任务中,您可以跨多个线程 fork 出各种子任务,我认为这是您的意图。

关于Java 字符串置换ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456922/

相关文章:

java - 如何在 Spring MVC 项目中有效地使用 Scala?

java - 使用异常映射器的 JAX-RS

regex - 如何使用正则表达式匹配亚洲字符?

Java内存: Object consumes thrice the size it should

algorithm - 计算所有可能的长方体

python - 在 Python 中展平任意嵌套列表的最快方法是什么?

c++ - 获取数组中所有数字组合且无间隙的最快方法

java - 如何对包含字符串的 HashMap 进行排序

java - JNI/JNA 链接不满足,但符号存在

c++ - 如何在 C++ 中对静态缓冲区执行字符串格式化?