0

私はEclipse IDEを使用しています。

私はこの質問をしました マルチスレッド出力は期待されていません

この質問は馬鹿げていると思われる人もいましたが、それでも貴重な意見を得ることができました。要するに、スレッド化は予測不可能であることを理解しました。結局のところ、「スレッド化が予測できない」理由を見つけるためにWebを閲覧し始めましたか?

プロセスは実際にはスレッドで構成されているため、スレッドのスケジューリングはOSによるプロセスのスケジューリングに依存していることをどこかで読みました。

私の質問は次のとおりです。

1) 私のコンピュータが任意に 1 つのプロセスしか実行していない場合。エクリプス。マルチスレッドは期待される結果をもたらすでしょうか??

2)私がコーディングした以外のデフォルトで実行されているスレッドがプロセスにあるため、eclipseです。

コードの出力を予測できない理由を本当に知りたいのですが、助けてください??

4

2 に答える 2

2

はい、Eclipse には他のスレッドが実行されています。また、最新のオペレーティング システムでは、常に他のシステム プロセスが実行されています。また、オペレーティング システムのカーネル自体にも、その内部で実行される隠しスレッドがあります (少なくとも Linux はそうです)。また、それらが存在しない場合でも、ユーザーがキーボードのキーを押したときなど、ハードウェア自体がハードウェア割り込みを使用して割り込みを行うことができます。

スレッド化には決定論的な形式があり、協調マルチスレッド化と呼ばれます。あまり良くないため、最新のオペレーティングシステムでは使用されていません。

于 2013-10-13T14:45:06.473 に答える
0

Eclipse、スレッド、および JVM を混同しています。メイン メソッドなどの単一のスレッドを使用するようにアプリを作成し、Eclipse 内から実行する場合、Eclipse はおそらく多くの異なるスレッドを持ち、アプリを実行する JVM も複数のスレッドを持つことができます (ガベージ コレクションなど)。 . しかし、予測可能性の観点からは、アプリのスレッドだけを気にする必要があります。タイミングに関しては、他のさまざまなスレッドについてのみ心配する必要があります。たとえば、予測できない GC の一時停止が発生する可能性があります。他のスレッドは、アプリのフローには影響しません。

アプリで新しいスレッドの作成を開始する場合は、スレッドがどのように相互作用するかについて心配する必要があります。フローが完全に予測不可能というわけではありません。スレッドの相対的なタイミングを知ることができないため、コードでそれを考慮に入れる必要があります。

たとえば、クラスメンバー変数をインクリメントして返す関数がクラスにあるとします。

int i = 0;
function foo() {
   ++i;
   // do some stuff
   return i;
}

これが 2 つの異なるスレッドによって呼び出された場合、関数は 1 と 2 を返す場合があります。また、両方のスレッドに 2 を返す場合もあります。

何が起こっているのか理解できないマルチスレッドの具体的な例を書く必要があるかもしれません。

于 2013-10-13T14:45:00.157 に答える