Синхронизация формальных параметров в java

Допустим, у меня есть метод, к которому обращаются два или более потоков, и я хочу сделать его потокобезопасным.

public int getVal(int x, int y, MyClass myObj)  
{
   int z;

   z = getInt(myObj);

   return x + y + z;  
}

Здесь, я думаю, нам не нужно синхронизировать для x + y, поскольку они примитивны.

Предположим, что getInt (myObj) изменяет состояние myObj и это влияет на значение z.

Следовательно, мне нужно будет обеспечить синхронизацию для строки z = getInt ( myObj); , но только когда оба потока передают один и тот же экземпляр в ссылке myObj. Как разработчик API, я бы не знал, будут ли оба потока передавать один и тот же экземпляр для myObj или нет. В некоторых случаях эти потоки могут передавать один и тот же экземпляр MyClass в ссылке 'myObj', а в других случаях они могут передавать разные экземпляры MyClass в ссылке 'myObj'.

Итак, как можно обеспечить безопасность потоков для строки z = getInt (myObj) ? (Конечно, мы не хотим синхронизировать, когда переданные экземпляры разные, и синхронизировать нужно только тогда, когда переданные экземпляры такие же. Ясно, что это не может быть определено).

Предполагая, что MyClass нельзя сделать неизменяемым, я думаю, что следующим решением может быть следующее:

synchronized(myObj)
{
  z = getInt(myObj);
}

Правильное ли это решение? А также, возникает странная ошибка ... Я получаю сообщение об ошибке: Завершение работы приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «Невозможно создать ...

Я пытаюсь добавить CoreData в существующий проект и странная ошибка ...

Я получаю сообщение об ошибке:

Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: 'Невозможно создать NSPersistentStoreCoordinator с nil model '

в RootView есть предупреждение в:

- (NSFetchedResultsController *)fetchedResultsController;

в строке:

_fetchedResultsController.delegate = self;

и говорится:

warning: class' RootViewController ' не реализует 'NSFetchedResultsControllerDelegate' протокол

какие-нибудь идеи?

5
задан Pepe 9 March 2011 в 19:30
поделиться