我有一个方法线程同步执行操作顺序
public static synchronized void print(String message, int sleepTime) throws InterruptedException {
System.out.println(message);
Thread.sleep(sleepTime);
}
调用此方法打印任何消息,我给它,并导致调用它来暂停指定的时刻线程。该static synchronized
使得它使这一类的多线程必须同步他们的print
以便完成另一个线程之前睡觉(除了第一个线程调用,当然print
)没有线程可以开始打印
别的地方在我的代码,我有调用线程这样做:
print("some message", 1000);
print("some other message", 1000);
每个审判我已经使用这个代码运行导致打印的第一条消息“一些信息”第一,其次是印刷“一些其他信息”最后所有线程的所有线程。
举例来说,如果我有3个线程,预期结果如下(我可以让他们当我运行了几次代码):
some message
some message
some message
some other message
some other message
some other message
诚然,我还没有运行许多试验。但是,我怀疑一个完成打印第一条消息(让我们调用这个线程A)的线程将与可能还没有打印第一条消息的其他线程(让我们称之为这样的线程B)竞争。 是否有可能的是,调度程序挑选的拾取乙用于第一时间,从而使所述第二消息之前的第二时间在某处被所述第一消息的所有实例都完成打印之前打印?
换句话说,是有可能,这可能发生:
some message
some message
some other message
some message
some other message
some other message
如果上面的序列是可能的,我怎么能保证它不发生?我如何保证第一个序列是总是发生的序列?
你说的第一顺序是什么意思?你最后两个问题都是矛盾的吗? – developer
第一序列,我的意思是打印所有“一些消息”行之前打印所有“一些其他消息”行。第二个序列是具有交换消息的序列。我指的是每个代码块的一个序列。 – Manuel
好的,但你为什么要这么做?目标不是很清楚。 – developer