2016-05-02 60 views
0

我們有2個線程在Java中:線程在Java中與while循環

主題1:

… 
public void run() 
{ 
while (Share.COUNTER<8) 
    Share.COUNTER++; 
} 
… 

線程2:

… 
public void run() 
{ 
    while (Share.COUNTER>-7) 
    Share.COUNTER--; 
    } 
    … 

的問題是:哪個線程將是最初由while循環終止? 第二個問題是: 是否有保證線程將終止運行方法? 你能幫我回答這個問題嗎?因爲Java中的線程對我而言是新的。

+2

如果'Share.COUNTER'沒有同步,那麼行爲是不確定的。 –

+2

首先,您可能會獲得併發訪問修改,因爲您可能同時訪問同一個屬性。要回答你的問題,你不能保證哪一個會先完成。如果你要運行它,有時線程1將是第一個,其他線程2將是第一個。這是一個機會遊戲 – Draken

+0

這取決於哪個線程將被系統所青睞。哪個線程將首先終止是不可預知的,並且不保證其中一個線程將結束(並因此結束另一個線程)。 – Massimo

回答

1

哪個線程最初將被while循環終止?

最有可能是有史以來首次啓動線程。一個線程需要一段時間才能啓動,一個線程可能需要一百萬的時間才能啓動另一個線程。

有沒有保證線程會終止運行方法?

兩個線程幾乎應立即終止。

不能線程1在線程2運行時也運行嗎?

他們可以但他們不會在同一時間開始,因爲計數到8幾乎沒有時間(可能只有幾微秒),它會很快終止。

+0

謝謝你,有很多不同的答案,你可以在評論中看到,所以我有點不確定什麼是正確的,什麼不是。 – Blnpwr

+1

@Blnpwr所有的評論似乎對我說同樣的話。 –

+0

我沒有得到的問題如下:兩個線程都使用相同的計數器。那麼同步器呢?如果線程1遞增計數器,而線程2遞減計數器。這讓我有點想到這一點。在這個例子中沒有同步。因此,我很難理解它們終止。 – Blnpwr