BlockingQueue가 적절한가요? 대기열이 비어있는 경우 취해야 할 조치는 무엇입니까? 제 3 자 소프트웨어에 대한 연결 수가 제한되어있는 것 같습니다. 이 경우 사용자 ID를 얻을 수없는 사용자에게 설명 메시지를 표시하려고 할 수 있습니다. 이 경우 블로킹이 유용하지 않습니다. 표준 큐를 중심으로 일부 동기화를 구현하고 비어있는 큐를 처리 할 수 있습니다. 이 같은?
public class UserIDQueue {
private static final Queue<String> USER_IDS = loadUserIDs();
private static final Object USER_ID_LOCK = new Object();
//doesn't need to be synchronized as it is called at class load time
private static Queue<String> loadUserIDs() {
Queue<String> userIDs = new LinkedList<String>();
for(String userID : THIRD_PARTY_USER_IDS) {
userIDs.add(userID);
}
return userIDs;
}
public static String getNextUserID() {
synchronized(USER_ID_LOCK) {
String userID = USER_IDS.poll();
if (userID == null) {
//not sure what your logic is, probably an exception
}
return userID;
}
}
public static void returnUserID(String userID) {
synchronized(USER_ID_LOCK) {
USER_IDS.add(userID);
}
}
}
사용자 ID는 재사용 할 수 없습니다 필요하더라도, 대부분의 아마 아이디 충돌이 허용되지 않을 것입니다. – cherouvim
사용할 수있는 사용자 ID 집합은 별도의 타사 시스템에서 관리합니다. 어쩔수없이. –