簡體   English   中英

使多個線程循環

[英]Making multiple threads in a loop

如何創建一個for循環,該循環創建多個可識別的線程。 線程是Players中的玩家,需要彼此通信。 我需要能夠訪問每個玩家的getter和setter。

基本上,每個Player都有一個名稱屬性,並且需要可識別。 如果我這樣做,我將看不到它們之間的可識別性...

for (int i = 0; i < numberOfPlayers; i++)
    {
        Thread t = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2)));
    }

一種選擇是創建一個玩家Map ,並將該Map傳遞給每個Player以便他們可以彼此直接通信(或將地圖設為static以便所有Player對象可見)

Map<String, Player> players = new HashMap<>();
for(int i = 0; i < numberOfPlayers; i++) {
    players.put("Player" + (i + 1), new Player("Player" (i + 1), (i + 1), (i + 2), players));
}
for(Player player : map.values()) {
    new Thread(player).start();
}

另一種選擇是創建一個充當消息總線的類,該類可以訪問所有玩家的設置者-如果一個玩家想向另一位玩家發送消息,則它將消息發送到消息總線,由該總線負責調用適當的setter方法

如果您知道numberOfPlayers則創建一個Thread數組,並將其填充到循環中:

Thread[] players = new Thread[numberOfPlayers];

for (int i = 0; i < numberOfPlayers; i++) {
    players[i] = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2)));
    // You can start the thread here only
}

但是,如果您不預先知道numberOfPlayers,則在創建數組時,可以創建一個ArrayList<Thread>並向其中添加每個新線程:

List<Thread> players = new ArrayList<Thread>();

for (int i = 0; i < numberOfPlayers; i++) {
    players.add(new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2))));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM