Gra*_*amS 6 uml sequence-diagram enterprise-architect
常见的多线程实现是让某个类Method_A()在线程中运行并阻塞等待某些信号/事件成员变量(例如WaitForSingleObject)。
然后,在不同线程中运行的交互类将调用Method_B()它执行一些工作,设置信号/事件变量,也许执行更多工作,然后返回。
如何在序列图上表示这种交互?
我是否应该有两条生命线,每个线程一条,即使它们在类的同一个实例上运行?我的建模工具(Enterprise Architect 12)不允许同一类在序列图上出现两次,因此似乎不鼓励这样做。
编辑:Geert 指出序列图应该使用实例,而不是类,这是一个公平的评论。然而问题是相同的:多个生命线意味着多个实例,但在问题中,Method_A()和正在同一个Method_B()实例上操作,只是来自不同的线程。这可以怎样表示呢?
我决定采取的方法是为同一个实例添加两条生命线,然后用<<thread>>构造型标记一条生命线,并将其运行的线程添加到名称中:
我意识到这可能不是标准的 UML,但它似乎清晰地表达了我想要表达的所有信息,这是最重要的,对吧?
马丁·福勒(Martin Fowler)在他的书中确实多次提到,有时非规范性图表实际上更清晰。所以这就是我的借口。:)
您永远不应该在序列图中使用类,而应使用以您的类作为分类器的实例/生命线。
如果在将类拖到序列图时按住控件,则可以选择将其作为实例而不是类拖放。
这样您就可以为同一类添加任意数量的内容。