在線程中啓動線程是否是一種好的做法?我已經四處搜尋,但沒有找到太多的信息。在線程內創建線程 - 良好的做法?
我有一個TimerTask,它可以在特定的時間每天獲取用戶列表。然後我想獲得一些關於用戶的數據,但這需要用戶輸入。因爲它需要用戶輸入,所以我不希望我的TimerTask線程在用戶沒有響應的情況下被阻塞。例如,列表中的第一個用戶可能無法在X時間內響應,我不想等待X個時間,直到向第二個用戶請求其數據,等等。所以在我的TimerTask中,我創建並啓動了一個新的Thread來獲取數據。這樣,在Y的時間裏,如果我已經收到一些數據(但不是全部),我仍然可以做其他事情,而不是等待每個人完成。
上述做法是不錯的做法嗎?有沒有更好的解決方案?
這是一些psudeo代碼,可以幫助你理解。
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);
}
}
它沒有問題。任何線程都可以啓動一個新線程。 –
http://stackoverflow.com/questions/7224670/threads-within-threads-in-java你看過嗎? –
@BalázsMáriaNémeth謝謝你,我錯過了這個! –