开发者社区> 问答> 正文

多个线程在Java中调用相同的方法

我的代码使用两个线程来调用相同的方法,但是该程序仅将第一个线程运行两次,而不是第二个线程,而且我不太确定为什么会这样。

ParallelImplementation(String repoPath1, String repoPath2, int revisions) throws IOException, GitAPIException {
    git1 = Git.open(new File(repoPath1));
    repo1 = FileRepositoryBuilder.create(new File(repoPath1));
    git2 = Git.open(new File(repoPath2));
    repo2 = FileRepositoryBuilder.create(new File(repoPath2));
    allCommits1 = getAllCommits(git1);
    allCommits2 = getAllCommits(git2);
    childParentMap1 = getParentCommit(allCommits1);
    childParentMap2 = getParentCommit(allCommits2);
    mapIterator1 = childParentMap1.entrySet().iterator();
    mapIterator2 = childParentMap2.entrySet().iterator();
    ExecutorService pool1 = Executors.newFixedThreadPool(N_THREADS);
    ExecutorService pool2 = Executors.newFixedThreadPool(N_THREADS);
    new Thread(() -> {
        try {
            runParallelImplementation(repoPath1, pool1, git1, repo1, allCommits1, childParentMap1, mapIterator1);
        } catch (GitAPIException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }).start();
    new Thread(() -> {
        try {
            runParallelImplementation(repoPath1, pool2, git2, repo2, allCommits2, childParentMap2, mapIterator2);
        } catch (GitAPIException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }).start();
}

展开
收起
垚tutu 2019-12-04 16:22:11 881 0
1 条回答
写回答
取消 提交回答
  • #include

    我意识到我正在使用相同的repoPath调用第二个线程,因此得到了相同的结果。

    2019-12-04 16:22:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载