2013-12-11 55 views
0

我还是新来的java运行这段代码现在连续运行1000次所以它的mutch可能更有效率来运行它多线程,但我不知道什么是什么最好的办法是给分数回主线程java从连续运行1000次的程序运行到muli线程

private int StartGameRandom(EntityManager managerOrg, UserInput input) 
{ 
    EntityManager manager = managerOrg.cloneState(managerOrg); 
    int playerId = 0; 
    int score = 0; 

    //get the player id from the player that has to play 
    ArrayList<Entity> tempState = manager.getAllWithComponents(PhaseComponent.class); 
    if (tempState.isEmpty()) 
     System.err.println("ScoreSystem.addScorePlayer noPlayerComponent found"); 
    Entity state = tempState.get(0); 
    PhaseComponent sComponent = (PhaseComponent) state.getComponent(PhaseComponent.class); 
    playerId = sComponent.getPlayerId(); 

    SetPlayersToRandom(manager); 
    new PhaseSystem(manager, input); 

    ArrayList<Entity> tempPlayer = manager.getAllWithComponents(PlayerComponent.class); 
    if (tempPlayer.isEmpty()) 
     System.err.println("montecarlo.startgamerandom noPlayerComponent found"); 
    Entity[] players = new Entity[tempPlayer.size()]; 
    tempPlayer.toArray(players); 

    //set all the players to random ai 
    for (Entity entity : players) { 
     PlayerComponent component = (PlayerComponent) entity.getComponent(PlayerComponent.class); 
     if (component.getPlayerID() == (byte)playerId) 
     { 
      score = component.getTotalScore(); 
      break; 
     } 
    } 

    return score; 
} 

这是我做的得分

    for (int j = 0; j < RUNS; j++) 
       { 
        int score = StartGameRandom(manager,input); 
        maxScore = Math.max(score, maxScore); 
        if (j == 0) 
        { 
         minScore = score; 
         averageScore = score; 
        } 
        else 
        { 
         minScore = Math.min(score, minScore); 

         averageScore = ((averageScore*j)+score)/(j+1); 
        } 
       } 

究竟什么是Java中做到这一点的最好办法

+0

你是什么意思,连续运行1000次?可以更好地解释你的目标是什么? – prmottajr

+1

第一个问题应该是询问您是否已经对您的代码进行了分析并确定这实际上是一个瓶颈。计算机速度非常快,使用线程的开销很容易超过任何好处。 – Deadron

+0

如果你看2秒的代码部分,你会看到行 (int j = 0; j

回答

2

让东西多线程不会自动使事情变得更快。事实上,多线程不应该是您优化的第一选择。

我不完全确定你的代码是干什么的,但是由于它需要10分钟并涉及一个EntityManager,我猜测数据库调用是罪魁祸首。

您应该调查您在每个零件上花费了多少时间,并查看您的数据库查询是否效率低下,或者是否正在进行多次单独调用(您可以合并为更少的调用)。

+0

它是一款棋盘游戏,我用它来了解更多关于ai的东西,我现在正在执行的是mcts min/max monte carlo方法1它需要很长时间我在evry上运行的原因1我必须在1我的ai游戏围绕1000次,如果我在2秒内设置2个随机ai来运行游戏,游戏会有很多动作 –