Это немного интересный вопрос, но я хотел узнать все мысли об этом шаблоне дизайна.Многопоточность с классами
public class MyThreadedMap {
private ConcurrentHashMap<Integer, Object> map;
...
public class Wrapper {
public Object get(int index){
return map.get(index);
}
}
}
На данный момент несколько потоков будет иметь свой собственный экземпляр обертке и будет доступ к карте с wrapper.get (индекс).
Я обнаружил, что изменение производительности от наличия обертки и отсутствие обертки немного лучше, то есть обертка помогает немного. Когда я устанавливаю синхронизацию по методу get, есть серьезный удар производительности.
Что именно происходит здесь? Когда создается внутренний класс, я создаю копию этого метода get для каждого экземпляра? Было бы лучше, если бы я просто покинул упаковку, так как нет реальной выгоды от производительности?
Это верно, но для этого примера это просто маленький легкий, чтобы идея началась. Давайте теперь скажем, что есть куча кода, разделяемого между потоками. Лот-код, который работает на этой карте или использует карту. Будет ли это иметь смысл тогда или Java действительно хорошо справляется с общими методами между потоками? – Richard
Методы - это всего лишь код; они всегда разделяются между потоками, поскольку они не меняются при выполнении программы. Это только обмен данными между потоками, где нужно быть осторожным. –