Ну я написал о том, в чем имею некоторый опыт :-) Но с удовольствием бы почитал про sbt. Может, статью напишете? Поиск как-бэ намекает, что про sbt на Хабре еще не писали. Может, и сам напишу, если руки дойдут. Пока maven меня полностью устраивает. Причин использовать другие билд-тулы не вижу.
заинтересовался, на бумажке набросал треугольник. в начале сделал через пропорцию (ну да, тот же тангенс), потом задумался — а что если посчитать приращения координат? типа, x увеличивается каждый раз, а y — через раз. тогда можно обойтись без деления, только сложением. дальше додумать не получилось, пора спать :)
Если серверов мало(допустим 2), а потоков много (допустим 20), то эта проверка может привести к неравномерному распределению запросов по потокам(Большая часть потоков может уйти к серверу под номером 0)
Почему может? Метод будет гарантированно равномерно выдавать 0 и 1, т.е. если будет 1000 вызовов метода, то 500 раз вернет 0 и 500 раз 1.
Набросал код для проверки pastebin.com/ixSXp5xu, распределение действительно равномерное.
Я бы сделал так (немного измененный кусок кода из реальной системы, которую поддерживаю я):
private AtomicInteger currentId = new AtomicInteger();
public int getNextId() {
for (;;) {
int current = currentId.get();
int next = current + 1;
if (next>MAX_ID) {
next = 0;
}
if (currentId.compareAndSet(current, next)) {
return next;
}
}
}
Почему может? Метод будет гарантированно равномерно выдавать 0 и 1, т.е. если будет 1000 вызовов метода, то 500 раз вернет 0 и 500 раз 1.
Набросал код для проверки pastebin.com/ixSXp5xu, распределение действительно равномерное.
Я бы сделал так (немного измененный кусок кода из реальной системы, которую поддерживаю я):
Ну и потом list.get(getNextId())