Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, GreenTea, Вы писали:
GT>>Согласен.. Поправил.
GT>>GT>> public void addTask(int clientId, Runnable task) {
GT>> synchronized (tasks) {
GT>> int nextIndex = findBestIndexToInsert(clientId);
GT>> tasks.add(nextIndex, new ClientTask(clientId, task));
GT>> if (!executingClients.contains(clientId)) {
GT>> tasks.notify();
GT>> }
GT>> }
GT>> }
GT>> private int findBestIndexToInsert(int clientId) {
GT>> int minIndex = 0;
GT>> for (int i = 0; i < tasks.size(); ++i) {
GT>> ClientTask task = tasks.get(i);
GT>> if (task.clientId == clientId) {
GT>> minIndex = i + 1;
GT>> }
GT>> }
GT>>
EP>Сложность N вызовов addTask квадратичная — O(N*N).
Ну и что? Даже при миллионе тасок этот цикл будет выполняться за миллисекунды. А ситуация что там будет миллион тасок врят-ли реальна.