2016-05-02 19 views
0

我々はJavaで2件のスレッドがあります。スレッドwhileループ

スレッド1:

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

スレッド2:

質問がされ
… 
public void run() 
{ 
    while (Share.COUNTER>-7) 
    Share.COUNTER--; 
    } 
    … 

:スレッドがあることを行っています最初はwhileループで終了しましたか? 2番目の質問は次のとおりです。 スレッドが実行メソッドを終了させる保証はありますか? Javaのスレッドが初めてのので、この質問に答えることができますか?

+2

'Share.COUNTER'の周りに同期がない場合、動作は不確定です。 –

+2

まず、同時に同じプロパティにアクセスする可能性があるため、おそらく同時にアクセスを変更することになります。あなたの質問に答えるために、最初に終わる保証はありません。あなたがそれを実行する場合、スレッド1が最初になり、他のスレッド2が最初になります。チャンスのゲームです – Draken

+0

これは、システムによって優先されるスレッドに依存します。どのスレッドが最初に終了するかは予測不可能であり、そのうちの1つが終了する(したがって、もう1つが終了する)という保証はありません。 – Massimo

答えて

1

whileループで最初に終了するスレッドはどれですか?

スレッドが最初に最初に開始する可能性が最も高いです。スレッドには時間がかかり、一方のスレッドはもう一方のスレッドを開始するまでに100万にカウントされます。

スレッドが実行メソッドを終了させる保証はありますか?

どちらのスレッドもほとんど直ちに終了する必要があります。

スレッド2が実行中にスレッド1を実行できません。

これらは可能ですが、正確に同じタイミングで開始することはできません.8にカウントするとほとんど時間がかかりません(マイクロ秒の数分の1になる可能性があります)。

+0

ありがとう、あなたがコメントで見ることができるように、さまざまな答えがたくさんあるので、私は少し正確ではないと確信しています。 – Blnpwr

+1

@Blnpwrすべてのコメントは私に同じことを言っているようです。 –

+0

私が得ない問題は次のとおりです:両方のスレッドが同じカウンタを使用しています。ではシンクロはどうですか?スレッド1がカウンタをインクリメントし、スレッド2がカウンタをデクリメントする場合それは私にそれについて少し考えさせるものです。この例ではシンクロはありません。したがって、それらが終了することを理解することは難しいです。 – Blnpwr