1

一度に 2 つの異なるスレッドを実行しようとしていますが、実行できません。Thread_1 と Thread_2 が実行されますが、両者の差は約 500ms です。コードのどこにもwait()orを使用していません。sleep()

質問:

  1. スレッドを同時にまたは並行して実行する方法は?

  2. スレッドを高速に実行するには?

2番目の質問ではこれを使用Thread.setPriority(Thread.MAX_PRIORITY)しましたが、他の質問との時差は同じです。

サンプルコードで更新

以下の例と同じことを行いますが、両方のスレッド間の実行に時間がかかります。

public static void main(String args[])
{
    MyThread thread1 = new MyThread("thread1: ");
    MyThread thread2 = new MyThread("thread2: ");
    thread1.start();
    thread2.start();
    boolean thread1IsAlive = true;
    boolean thread2IsAlive = true;
    do {
       if (thread1IsAlive && !thread1.isAlive()) {
           thread1IsAlive = false;
            System.out.println("Thread 1 is dead.");
       }
       if (thread2IsAlive && !thread2.isAlive()) {
           thread2IsAlive = false;
           System.out.println("Thread 2 is dead.");
       }
    } while(thread1IsAlive || thread2IsAlive);
}

私はウェブを検索し、いくつかのドキュメントを調べました。次に何を試すことができますか?

4

2 に答える 2

2

スレッドを同時にまたは並行して実行する方法は?

プログラマとしては、マルチ プロセッサ マシンでのみ可能です。シングル プロセッサでは、一度に 1 つのスレッドのみが実行され、実行するスレッドを選択するのは JVM (および OS) 次第です。

スレッドを高速に実行するには?

(あなたがしたように)試すことができますが、全体的な制御はJVM(およびOS)のみです。

ただし、スレッドの優先度を上げても、高速に実行されるわけではありません。スレッドが他のスレッドよりも頻繁に実行される可能性があるだけです。つまり、OSはそれを選択するかもしれません(または選択しないかもしれません)。他のスレッドよりも数回。

詳細については、このリンクを参照してください。これもチェック。

于 2012-12-06T12:14:53.563 に答える
1

スレッドを開始するには、thread.start() を呼び出します。ただし、いつ開始されるかは OS によって異なります。優先順位を設定しても、これを正確に達成することはできません。

于 2012-12-06T12:14:10.087 に答える