Разница между синхронизированными и блокировками чтения / записи такова, что когда вы используете синхронизированный режим, он допускает доступ только к одному потоку за раз. С блокировкой чтения / записи у вас может быть много считывателей одновременно (учитывая, что блокировок записи уже нет), поэтому вы можете получить лучшую параллельную производительность в некоторых случаях, особенно когда здесь много операций чтения.
Вы должны добавить еще много потоков, которые обращаются к этому объекту, чтобы проверить производительность.
И вы можете просто посчитать время между завершением и началом операций, чтобы измерить производительность (например, Long startTime = System.nanoTime ();).
Прочтите здесь, чтобы узнать, как проверить, закончился ли поток, чтобы можно было измерить время выполнения: Как узнать, закончили ли другие потоки?
изменить, чтобы ответить на комментарий Эй, мой ответ немного упрощен (хорошо, очень, так как многопоточность трудна), так как я писал это между делами, так что пока я могу связать вас с некоторыми другими ресурсами, которые обеспечивают более углубленный взгляд.
очень простой пример согласно вашему существующий класс:
class Number {
private int value;
public Number(int value) {
this.value = value;
}
public synchronized int getValue() {
return value;
}
public synchronized int changeData(int change) {
value = change;
return value;
}
}
Из определения в objc.h
:
#if (TARGET_OS_IPHONE && __LP64__) || TARGET_OS_WATCH
typedef bool BOOL;
#else
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#endif
#define YES ((BOOL)1)
#define NO ((BOOL)0)
Так, да, можно предположить, что BOOL является символом. Можно использовать (C99) bool
тип, но все платформы Objective C Apple и большая часть кода Objective-C/Cocoa используют BOOL, таким образом, Вы сохраните себя головная боль, если определение типа когда-нибудь будет изменяться, просто используя BOOL.
Тип Objective C, который необходимо использовать, BOOL
. Нет ничего как собственный булев тип данных, поэтому чтобы быть уверенным, что код компилирует на всем использовании компиляторов BOOL
. (Это определяется в Платформах Apple.
Да, BOOL является определением типа для символа со знаком согласно objc.h.
я не знаю о bool, все же. Это - вещь C++, правильно? Если это определяется как символ со знаком, где 1 ДА/ВЕРНЫЙ, и 0 НЕТ/ЛОЖЬ, то я предполагаю, что это не имеет значения, какой Вы используете.
, Так как BOOL является частью Objective C, тем не менее, вероятно, имеет больше смысла использовать BOOL для ясности (другие разработчики Objective C могли бы быть озадачены, если они видят bool используемое).
Я иду против условностей. Мне не нравится typedef для базовых типов. Я считаю, что это бесполезное косвенное обращение, убирающее ценность.