我有一個方法線程同步執行操作順序
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