- 1
- 2
- 3
- 4
- 5
- 6
public List<OrderEntity> getOrders() {
if (orders == null) {
orders = new ArrayList<OrderEntity>();
}
return orders;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+148
public List<OrderEntity> getOrders() {
if (orders == null) {
orders = new ArrayList<OrderEntity>();
}
return orders;
}
Потокобезопасность? Не, не слышал.
Lure Of Chaos 23.09.2011 17:00 # +3
roman-kashitsyn 23.09.2011 17:03 # −2
Lure Of Chaos 23.09.2011 17:09 # 0
roman-kashitsyn 23.09.2011 17:15 # 0
Lure Of Chaos 23.09.2011 17:23 # +2
Irdis 23.09.2011 20:34 # +6
КЭП
Lure Of Chaos 23.09.2011 20:36 # −4
КЭП №2
Irdis 23.09.2011 20:44 # +2
Lure Of Chaos 23.09.2011 20:47 # 0
Irdis 23.09.2011 20:52 # +1
Lure Of Chaos 23.09.2011 20:53 # 0
Irdis 23.09.2011 20:56 # 0
Lure Of Chaos 23.09.2011 20:57 # 0
вы меня троллите?
Irdis 23.09.2011 21:04 # +2
короче, я это говнокодом совершенно не считаю. Может быть из контекста было бы понятно в чем проблема. (Автор несёт в треде что-то подозрительное)
Но если подходить ко всему с подходом не "потокобезопасно", то и i++ надо бы помещать под локи.
Lure Of Chaos 23.09.2011 21:10 # 0
> то и i++ надо бы помещать под локи
не надо, поскольку это локальная переменная, которую два потока совместно использовать никогда не смогут.
Irdis 23.09.2011 22:25 # 0
кто сказал.
\\OLOLOLO
public void getOrders() { i++; }
Lure Of Chaos 23.09.2011 22:26 # 0
Irdis 23.09.2011 22:40 # 0
поговнокодю ка я на шарпе
Тут всем понятно, что GetOrder говнокод. Но ничего не понятно из примера roman-kashitsyn'а.
Lure Of Chaos 23.09.2011 23:17 # 0
Irdis 23.09.2011 23:26 # 0
но я бы писал так
Lure Of Chaos 23.09.2011 23:28 # 0
Irdis 23.09.2011 23:36 # 0
foo.BeginInvoke(null, null);
foo.BeginInvoke(null, null);
Можно написать так (типо короче).
Irdis 23.09.2011 21:11 # 0
Lure Of Chaos 23.09.2011 21:14 # −4
karamba 23.09.2011 21:52 # +3
Lure Of Chaos 23.09.2011 22:19 # −2
> проще априори считать, что все классы не рассчитаны на threadsafe
как правило, большинство кодеров вряд ли рассматривает этот вопрос, а проблемы начнутся, есть небезопасный использовать, полагая, что он безопасен - нежели наоборот...
CKrestKrestGovno 25.09.2011 16:18 # 0
Говнокодеров, которые даже не знали, что их взяли в проект с многопоточностью.
gegMOPO4 24.09.2011 07:41 # 0
Lure Of Chaos 24.09.2011 10:22 # 0
roman-kashitsyn 24.09.2011 00:18 # 0
Irdis 24.09.2011 00:26 # +1
ArrayList тут как пример, что не потокобезопасные совершенно не говно.
Irdis 24.09.2011 00:33 # 0
absolut 23.09.2011 17:15 # +1
roman-kashitsyn 23.09.2011 17:16 # −1
ingenuus 23.09.2011 18:02 # −1
roman-kashitsyn 23.09.2011 18:06 # 0
guest 23.09.2011 18:27 # 0
karamba 23.09.2011 18:33 # 0
guest 23.09.2011 18:34 # 0
karamba 23.09.2011 18:52 # 0
Представим вам надо сделать логирование обращений к полю, или там бряк по обращению поставить.
guest 23.09.2011 19:24 # 0
На самом деле я всегда использую access=field, чтобы иметь возможность создавать immutable объекты.
tir 24.09.2011 11:31 # 0
guest 23.09.2011 17:22 # 0
roman-kashitsyn 23.09.2011 17:24 # −1
guest 23.09.2011 18:14 # +1
karamba 23.09.2011 18:25 # +2
Если это некий статический объект, содержащий всю конфигурацию и данные приложения, то что-то мне подсказывает, что там есть архитектурный говнокод. Если нужен кеш, то во всяких там Hibernate есть кеш. Есть кеши на уровне Application сервера. Причем все эти решения поддерживают репликацию кеша между несколькими нодами/системами. И никаких рисков внести потоко-небезопасный код нет.
Юзайте Spring MVC, он избавит вас от неверных архитектурных решений :)
guest 23.09.2011 18:30 # +1
roman-kashitsyn 23.09.2011 18:30 # 0
guest 27.09.2011 11:37 # 0
roman-kashitsyn 24.09.2011 09:13 # +7
tir 25.09.2011 10:34 # 0
сталкивался на практике с ситуацией, когда таких вот коллекций в объекте было штук 5 а то и больше, а объектов в памяти было 500к+. оверхед по памяти нехеровый выходит, если сразу инициализировать.
tir 26.09.2011 07:45 # 0
roman-kashitsyn 26.09.2011 17:19 # 0
. Можно ещё попробовать прикрутить AtomicReference<List<OrderEntity>>, но тут возникают некоторые трудности, методов борьбы с которыми я не знаю.
roman-kashitsyn 26.09.2011 17:28 # 0
absolut 26.09.2011 17:44 # 0
roman-kashitsyn 26.09.2011 17:49 # 0
tir 26.09.2011 18:09 # 0
roman-kashitsyn 26.09.2011 18:14 # 0
tir 26.09.2011 18:29 # 0
roman-kashitsyn 26.09.2011 18:31 # 0
tir 26.09.2011 18:36 # 0
В этих паттернах очень много построено на том, что поле является static.
Как подобный паттерн можно применить в случае обычного объекта?
roman-kashitsyn 26.09.2011 18:59 # 0
tir 26.09.2011 19:30 # 0