Синхронизация в Java часто включает операции синхронизации на том же экземпляре. Синхронизация на this
тогда очень идиоматична, так как this
общая ссылка, которая автоматически доступна между различными методами экземпляра (или разделы) в классе.
Используя другую ссылку специально для блокировки, путем объявления и инициализации частного поля Object lock = new Object()
, например, что-то, в чем я никогда не нуждался или использовал. Я думаю, что только полезно при необходимости во внешней синхронизации на двух или больше несинхронизируемых ресурсах в объекте хотя я всегда пытался бы осуществить рефакторинг такую ситуацию в более простую форму.
Так или иначе, неявный (синхронизированный метод) или явный synchronized(this)
используется много, также в библиотеках Java. Это - хорошая идиома и, если применимо, должно всегда быть Вашим предпочтительным вариантом.
Относительно документации Adobe при открытии документа PDF из командной оболочки , вы можете передать параметры команде открытия с помощью переключателя / A, используя следующий синтаксис:
myProcess.StartInfo.Arguments = "/A \"nameddest=Test2=OpenActions\" C:\\example.pdf";
Если я опущу параметр OpenActions, все будет работать нормально, например:
myProcess.StartInfo.Arguments = "/A \"nameddest=Test2\" C:\\example.pdf";
Я не уверен, почему OpenActions нарушает открытие файла, но с опущением работает нормально.
Вы настроили пункты назначения? Для этого у вас должна быть стандартная или профессиональная версия Adobe Acrobat:
Adobe Reader имеет несколько ошибок, связанных с открытием именованных мест назначения. Посмотрите на http://xenon.arcticus.com/open-pdf-named-destination-dde-c-c для получения информации и обходных путей.