<分区>
在一个线程中启动一个线程是好的做法吗?我四处搜索,但没有找到太多信息。
我有一个 TimerTask,它每天在特定时间获取用户列表。然后我想获取有关用户的一些数据,但这需要用户输入。因为它需要用户输入,所以我不希望我的 TimerTask 线程在用户没有响应的情况下被阻塞。例如,列表中的第一个用户可能不会在 X 时间内响应,我不想等待 X 时间直到我向第二个用户询问他们的数据,等等。因此,在我的 TimerTask 中,我创建并启动了一个新线程来获取数据。这样,在 Y 时间内,如果我收到了一些数据(但不是全部),我仍然可以做其他事情,而不是等待每个数据都完成。
执行上述操作是好的做法吗?有没有更好的解决方案?
这是一些伪代码,可以帮助您理解。
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);
}
}