Ist es eine gute Übung, einen Thread innerhalb eines Threads zu starten? Ich habe gesucht, aber nicht viele Informationen gefunden.Erstellen Sie einen Thread innerhalb eines Threads - gute Praxis?
Ich habe eine TimerTask, die eine Liste von Benutzern jeden Tag zu einer bestimmten Zeit erhält. Ich möchte dann einige Daten über den Benutzer erhalten, aber dies erfordert Benutzereingaben. Da es Benutzereingaben erfordert, möchte ich nicht, dass mein TimerTask-Thread blockiert wird, wenn Benutzer nicht antworten. Beispielsweise reagiert der erste Benutzer in der Liste möglicherweise nicht in X Zeit, ich möchte X Zeit nicht warten, bis ich den zweiten Benutzer nach ihren Daten frage, und so weiter. In meiner TimerTask erstelle ich einen neuen Thread und starte ihn, um die Daten zu erhalten. Auf diese Weise kann ich in Y Zeit, wenn ich einige Daten erhalten habe (aber nicht alle), immer noch andere Dinge tun, anstatt auf jeden einzelnen zu warten.
Ist es eine gute Übung, das oben genannte zu tun? Gibt es bessere Lösungen?
Hier ist etwas psudeo Code, der Ihnen helfen kann, zu verstehen.
class UserThread extends TimerTask {
@Override
public void run() {
log.debug("Get a list of members!");
List<String> users = userManager.getUsers();
retrieveInitialData(users);
}
public void retrieveInitialData(List<String> users) {
for(String user : users) {
new Thread(new GetData(user)).start();
}
}
addToSuccessList(String user) {
synchronized(successList) {
successList.add(user);
}
}
addToFailureList(String user) {
synchronized(failureList) {
failureList.add(user);
}
}
class GetData extends Thread {
String userID;
public GetData(String user) {
this.userID = user;
}
public void run() {
try {
dataManager.getData(user);
addToSuccessList(user);
} catch(Execption e) {
addToFailureList(user);
}
}
Es ist nichts falsch daran. Jeder Thread kann einen neuen Thread starten. –
http://stackoverflow.com/questions/7224670/threads-within-threads-in-java hast du dir das angesehen? –
@ BalázsMáriaNémeth Danke dafür, das habe ich irgendwie vermisst! –