Для бронирования веб-приложения для путешествий, в котором зарегистрировано 100 одновременных пользователей, следует забронировать билет и создать «номер E-Ticket Number» с помощью «синхронизированного» или «статического синхронизированного» метода?В чем разница между синхронизированной и статической синхронизацией?
ответ
Хорошо, вы знаете разницу между статическим методом и методом экземпляра в целом?
Единственное отличие, которое делает synchronized
, заключается в том, что до того, как виртуальная машина начнет использовать этот метод, ему необходимо приобрести монитор. Для метода экземпляра полученная блокировка является той, которая связана с объектом, на который вы вызываете метод. Для статического метода полученный захват связан с самим типом - так что никакие другие потоки не смогут одновременно вызвать любые другие синхронизированные статические методы.
Другими словами, это:
class Test
{
static synchronized void Foo() { ... }
synchronized void Bar() { ... }
}
является примерно эквивалентно:
class Test
{
static void Foo()
{
synchronized(Test.class)
{
...
}
}
void Bar()
{
synchronized(this)
{
...
}
}
}
Вообще я стараюсь не использовать синхронизированные методы на всех - я предпочитаю явно синхронизировать частный блокировка:
private final Object lock = new Object();
...
void Bar()
{
synchronized(lock)
{
...
}
}
У вас нет предоставили достаточно информации, чтобы определить, должен ли ваш метод быть статическим или экземпляром, или вообще ли он должен быть синхронизирован. Многопоточность - сложная проблема - я настоятельно рекомендую вам прочитать ее (через книги, учебные пособия и т. Д.).
Ответ Джона охватывает разницу, намеченную в заголовке вопроса.
Тем не менее, я бы сказал, что для создания номера билета необходимо использовать ни. Исходя из предположения, что они хранятся в базе данных, где-то - база данных должна отвечать за генерирование номера при вставке новой записи (предположительно с помощью автоинкрементного первичного ключа или чего-то подобного).
В противном случае, если вы должны сгенерировать номер в Java-коде, я подозреваю, что накладные расходы синхронизации могут быть весьма заметны у 100 одновременных пользователей. Если вы работаете на Java 1.5 или более поздней версии, я хотел бы использовать java.util.concurrent.AtomicInteger
, чтобы получить номер билета, который вы можете просто позвонить в
private static final AtomicInteger ticketSequence;
static
{
final int greatestTicket = getHighestExistingTicketNumber(); // May not be needed if you can start from zero each time
ticketSequence = new AtomicInteger(greatestTicket + 1);
}
public /*static*/ int getNextTicketNumber()
{
return ticketSequence.incrementAndGet();
}
Это дает одновременное глобальную уникальность вам нужно в гораздо более эффективным способом чем синхронизация каждый раз, когда вам нужно целое число.
- 1. В чем разница между одиночным классом с синхронизированной функцией и статической синхронизированной функцией
- 2. В чем разница между использованием synchronizedCollection и просто синхронизированной (сборкой)?
- 3. В чем разница между синхронизированной функцией и синхронизированным блоком?
- 4. В чем разница между декларацией «статической сопзЬ» и «Const статической»
- 5. В чем разница между публичной статической и статической публикацией?
- 6. В чем разница между сериализацией и синхронизацией в java?
- 7. В чем разница между синхронизацией и блокировкой в моем примере?
- 8. Perforce: в чем разница между возвратом и принудительной синхронизацией?
- 9. Разница между асинхронной и синхронизацией в октаве?
- 10. Разница между взаимным исключением и синхронизацией?
- 11. В чем разница между внутренней синхронизацией часов и внешней синхронизацией часов в распределенных системах?
- 12. В чем разница между статической переменной в C++ и C#?
- 13. В чем разница между статической и динамической привязкой?
- 14. C++ в чем разница между статической и динамической декларации внутренне
- 15. В чем разница между структурой и статической структурой?
- 16. В чем разница между статической библиотекой и приложением командной строки?
- 17. В чем разница между «статической опр на» и «статический на»
- 18. В чем разница между статической библиотекой и динамической
- 19. Разница между синхронизацией WCF и асинхронным вызовом?
- 20. Разница между синхронизацией и блокировкой повторного входа?
- 21. Разница между репликацией данных и синхронизацией?
- 22. В чем разница между общей папкой и синхронизированной папкой в Vagrant?
- 23. В чем разница между «и»?
- 24. В чем разница между `{}` и `[]`?
- 25. В чем разница между == и ===?
- 26. В чем разница между «+» и «\ +»?
- 27. В чем разница между + = и = +?
- 28. В чем разница между/* ... */и/** ... */
- 29. В чем разница между: и +:
- 30. В чем разница между $ {} и # {}
Если на веб-сайте бронирования путешествий существует 100 одновременных пользователей. Затем функция «Бронирование билетов» и функция «E-Tickect Number» должны быть реализованы в «синхронизированном» блоке или «статическом синхронизированном» блоке? – 2009-10-08 07:22:09
И ваш вопрос, и этот комментарий, который повторяется, не имеет смысла. если превосходный ответ Джона Скита не соответствует вашим потребностям, пожалуйста, перефразируйте свой вопрос. – SingleShot
Из любопытства: как это «грубо» эквивалентно? У меня создалось впечатление, что эффективное выполнение одного и того же (даже если «синхронизировано» на методе превращено в флаг вместо некоторых инструкций байткода (к которым синхронизирован блок). –