Подходит ли BlockingQueue? Какие действия следует предпринять, если очередь пуста? Похоже, у вас ограниченное количество подключений к программному обеспечению сторонних производителей. В этом случае вам может потребоваться показать пояснительное сообщение любому пользователю, который не может получить идентификатор пользователя. В этом случае блокировка не будет полезна. Вы можете просто реализовать некоторую синхронизацию вокруг стандартной очереди и обрабатывать пустые очереди по своему усмотрению. Как то так?
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);
}
}
}