Задача. Дано: 100500*10¹⁰⁰ объектов идентифицируемых по некоему id. Нужно ограничить одновременный доступ к любому из объектов.
Наивное решение:
Lock locks[];
Lock lock = locks[id % locks.length];
lock.lock();
try {
// do some magic with our object
} finally {
lock.unlock();
}
Позволяет одновременно работать количеству потоков не больше locks.length что нас устраивает.
Какие подводные камни?
зы. да есть подобная тема (мояже) от 2009 года, но там камней так и не накидали, тем не менее в диком коде такое решение почемуто не попадалось, вот и интересно.