0

私はJavaでマルチスレッドを試しています。基本的には2つのスレッドを作成し、それらを数に数えたいと思っています。

しかし、半分くらいになると一定時間眠ります。そのため、FOR ループ内に IF ステートメントを配置して、途中まで到達したことを確認し、到達した場合はスリープ状態にすることを考えていました。

私は学校のコンピューターを使用しているため、シングルコアCPU atmを実行しています。理論上、最初のスレッドをスリープ状態にすると、2番目のスレッドが開始するはずですか?

また、最初のスレッドを 2 番目のスレッドからスリープ状態にすること、およびその逆は可能ですか?

4

5 に答える 5

1

以下を使用できますThread.sleep(int milliseconds)

現在実行中のスレッドを、指定されたミリ秒数だけスリープ (一時的に実行を停止) させます。これは、システム タイマーとスケジューラの精度と精度に依存します。スレッドは、どのモニターの所有権も失いません。

あるスレッドが別のスレッドを一時停止するようにすることに関しては、他のスレッドが他のスレッドの実行を一時停止するために呼び出すことができるメソッドを公開できます。

他のマルチスレッド プログラムと同様に、競合状態に注意してください。

他の質問については、シングル コア プロセッサは複数のスレッドを実行できる必要があるため、コアの量 (この場合) は実際には問題になりません。

于 2012-08-08T07:02:40.663 に答える
0

スレッドは、Thread.sleep. シングル コア CPU で実行している場合でも、JVM は実行可能なすべてのスレッドの時間をスケジュールします。各スレッドがいつ実行されるかをより詳細に制御したい場合は、java.util.concurrentパッケージ内のセマフォやその他のロック/スケジューリング メカニズムを調べる必要があります。

より具体的な質問をして、プロジェクトで行き詰まっている場所について助けを求めてください。

于 2012-08-08T06:59:41.693 に答える
0

あるスレッドが別のスレッドをスリープ状態にしてから、それ自体がスリープ状態になると、競合/デッドロック状態に非常に近づいています。

http://en.wikipedia.org/wiki/Deadlock#Necessary_conditions

于 2012-08-08T07:00:37.870 に答える
0

I'd recommend you to have a look at this book It covers almost everything about java and concurrency/multithreading, including coding principles and many examples. Book For Conucurrency In java

于 2012-08-08T07:07:21.250 に答える
0

For the first part of your question:

It's possible that the second thread may have finished by the time execution reaches the sleep() statement in the first thread. This is because the JVM allocates CPU time to threads not based on when in time each was started, but based on complex scheduling algorithms. The only thing that is guaranteed when you call Thread.sleep(1000) is that the thread WILL stop execution at that point for at least 1000 milliseconds.

The second part - putting one thread to sleep from another - has been addressed well by others. You need to watch out for race conditions.

于 2012-08-08T07:09:01.800 に答える