( Редактировать Вы можете решить эту проблему, просто используя асинхронные сообщения, как указывает @sim. Это просто поможет. Ответ ниже показывает, что происходит под капотом. Так что если вы этого не сделаете позаботься о деталях, иди с этим ответом.)
Вы спрашиваете больше о дизайне, чем о UML. А именно, как параллельные экземпляры общаются друг с другом. Вы сказали сначала
Method_A () работает в потоке и заблокирован в ожидании
, что просто означает, что он не может ничего принять, поскольку он заблокирован. Теперь, исходя из контекста вашего вопроса, я предполагаю, что вы все еще хотите общаться с этим экземпляром, так как
в другом потоке вызовет Method_B ()
Таким образом, чтобы иметь возможность принять сообщение, экземпляр должен находиться в соответствующем состоянии. Есть несколько способов добиться этого. Один простой способ - если соответствующая ОС имеет такую поддержку, вернуться к планировщику и сказать ему, что он ожидает какого-то сообщения.
![enter image description here](https://i.stack.imgur.com/fLzWJ.png)
Теперь, когда вызывается method_b
, вы знаете, внутри Object1
, что вы находитесь в каком-то неактивном состоянии внутри method_a
и делаете соответствующие (возвратные) действия.
Другой способ - опросить планировщик на наличие входящих сообщений и обработать их.
Необходимо помнить, что отправка сообщения обычно не имеет непосредственного отношения к экземпляру, а указывает системному планировщику взаимодействовать с соответствующим экземпляром (по крайней мере, в большинстве ОС).
Я только что вспомнил из компилятора Modula2, который я однажды написал, что у него есть концепция сопрограмм, которая позволяет параллельному потоку выполняться в скомпилированном коде. Но в основном это просто сопоставлено двум независимым потокам, работающим под капотом полу-одиночного, и вы будете изображать это с двумя линиями жизни, когда будете вдаваться в детали.
N.B .: Вместо метода это должна быть операция (поскольку она вызывается сообщением; метод - это то, что реализовано внутри операции). И согласно общему соглашению они должны начинаться со строчной буквы.
А также: НЕ используйте классы на SD. К сожалению, EA все еще позволяет это (почему? Спросите их!) Где-то в их документах спрятано предложение, которое вы должны использовать экземпляры. Иначе модель сломается. SD - это всегда (!) Образец последовательности экземпляров, говорящих друг с другом. Классы не разговаривают, это просто чертежи для экземпляров.