2013-12-11 112 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來運行遊戲,遊戲會有很多動作 –