序列图的生命线代表了时间的流逝,但沿着生命线从上向下移动时,时间在生命线上的分布并不是均匀的,而且不同生命线上时间流逝的速度通常也是不同的。此外,不同生命线在同一水平位置的时刻一般也并不相同。
在生命线上某个时刻发送或者接收消息,可以看作是当前生命线在该时刻上发生的事件。
生命线之间是相互独立的,并且不同生命线上时间流逝的速度不同,因此当一系列事件在不同的生命线上发生时,通常很难确定它们的发生顺序。只有事件发生在同一条生命线时,从上到下的事件才表明它们发生时间顺序。
关于生命线上的消息、事件和时间有如下几个规则:
- 消息的结束(接收消息)必须发生在消息开始(发送消息)之后。这是基本的因果关系规则。
- 单条生命线上的事件从上到下按时间顺序排列。这是生命线的定义。此规则强制规定了生命线上事件的严格顺序。
- 如果消息有返回值,消息的返回只能在原始消息被接收之后发生。这是规则1和2的必然结果。
表示消息的箭头可以是向下倾斜的。可以利用这种倾斜来表示消息从一条生命线传递到另一条生命线时涉及了时间的流逝。当然,根据上述规则1,消息从一条生命线传递到另一条生命线,无论这个过程多快都一定会产生时间的流逝,它与消息箭头是水平还是倾斜没有关系。图 1使用向下倾斜的箭头描述了两条相互交叉的消息。

图 1 交叉的消息
根据前述规则,序列图允许存在事件发生的多条时间路径。就整个图而言,事件形成一个偏序关系。每个有效的事件序列称为一个"轨迹(TRACE)"。当消息像图 1这样相互交叉时,就会产生多个轨迹的可能性。
建模者通常使用"!"标记消息发送事件,使用"?"标记消息接收事件,轨迹则通常用尖括号"< >"表示,尖括号内的事件顺序表明事件发生时间的顺序。
以下尝试分析图 1中的事件与轨迹。
根据规则1,消息m和n都遵循先发送后接收的事件顺序,因而消息m的发送(m!)早于消息m的接收(m?),消息n的发送(n!)早于消息n的接收(n?),即轨迹中存在<m!, m?>、<n!, n?>。
根据规则2,可知在生命线lifeline1上消息m的发送(m!)早于消息n的接收(n?),在轨迹中存在<m!, n?>;在生命线lifeline2上消息n的发送(n!)早于消息m的接收(m?),在轨迹中存在<n!, m?>。
消息m和n的发送事件分别发生于生命线lifeline1和lifeline2,所以这两个发送事件的时间先后顺序存在两种可能,消息m先于消息n发出或者消息n先于消息m发出,即轨迹中存在两种可能<m!, n!>或<n!, m!>。类似地,消息m和n的接收事件轨迹也存在两种可能<m?, n?>或<n?, m?>。
综上,图 1所表达的序列存在四种可能的轨迹:
<m!, n!, m?, n?>
<m!, n1, n?, m?>
<n!, m!, m?, n?>
<n!, m!, n?, m?>
根据上述讨论可知,如果序列图中只有两条生命线并且没有消息交叉,那么序列图中的事件只可能有一种轨迹。然而,当序列图中存在多于两条生命线时,存在的轨迹也将不是唯一的。例如在图 2中,存在几种可能的轨迹?

图 2 多条生命线上的交互
序列图图 2中,可以根据生命线:Server确定消息m的接收事件发生于消息n的接收事件之前,即<m?, n?>。而生命线client1:和client2:上消息m的发送事件m!和消息n的发送事件n!,由于不同生命线的时刻及时间流逝速度不同,并不能依据它们在序列图生命线上的位置确定事件发生的时刻顺序,因而消息m和消息n的发送存在两种可能,即<m!, n!>或<n!, m!>。
类似地,综合上述分析,可知序列图图 2存在以下三种可能的轨迹。
<m!, m?, n!, n?>
<m!, n!, m?, n?>
<n!, m!, m?, n?>