Здравствуйте, 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>
Сложность N вызовов addTask квадратичная — O(N*N).