У меня есть класс, который написан для одного потока без синхронизируемых методов.
class MyClass implements MyInterface{
//interface implementation methods, not synchronized
}
Но нам также нужна была синхронизированная версия класса.Итак, мы создали класс-оболочку, который реализует тот же интерфейс, но имеет конструктор, который принимает экземпляр MyClass.Любой вызов методов синхронизированного класса делегируется экземпляру MyClass.Вот мой синхронизированный класс ..
class SynchronizedMyClass implements MyInterface{
//the constructor
public SynchronizedMyClass(MyInterface i/*this is actually an instance of MyClass*/)
//interface implementation methods; all synchronized; all delegated to the MyInterface instance
}
После всего этого я провел множество тестовых прогонов с обоими классами.Тесты включают чтение файлов журнала и подсчет URL-адресов в каждой строке.Проблема заключается в том, что синхронизированная версия класса последовательно занимает меньше времени для анализа.Я использую только один поток для теста, так что нет никакой вероятности взаимоблокировок, обхода условий и т. Д. Каждый файл журнала содержит более 5 миллионов строк, что означает вызов методов более 5 миллионов раз.Кто-нибудь может объяснить, почему синхронная версия класса migt занимает меньше времени, чем обычная?