2016-05-02 63 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