-1

私はマルチスレッドと本当に混乱しています。私はこの事実を知っている

スレッド化は予測不可能です

この事実は、スレッドの同じ Priority に対してのみ保持されますか? そうでない場合、スレッドの優先度を設定する必要は何ですか。

つまり、次のコードを想定しています。

public class Threadsync implements Runnable{
    Thread t;
    String str;
    public Threadsync(String name)
    {
        this.str=name;
        this.t=new Thread(this,name);
        this.t.start();
        this.t.setPriority(10);
    }
    public void run()
    {
        System.out.println("hello "+str);
    }
    public static void main(String[] args)
    {
        new Threadsync("thread1");       //1
        new Threadsync("thread2");       //2
        System.out.println("world");     //3 
    }
}

これは私のコードで、hello thread1 world hello thread2 として出力されました。

スレッド1とスレッド2について混乱はありませんが、スレッド2がメインスレッドよりもほぼ2倍の優先度を持っているにもかかわらず、スレッド2がメッセージworldを出力する前にメインスレッドがメッセージを出力するのはなぜですか。hello thread2前もって感謝します 。詳細な説明は非常に高く評価されます

4

4 に答える 4

2

スレッディングは、あなたがどこで言っているか、どこで正しいかを予測できません。JVM には、小さなスレッドのほかに処理すべき多くの問題があります。優先順位をつけても、いつ何が起こるかわかりません。より多くのスレッドで実験を実行すると、より多くの処理が行われ、何度もそれが表示されます...しかし、予測できないにもかかわらず、それらは依然として非常に役立ちます。

于 2013-10-14T17:50:55.660 に答える
1

スレッドがいつ実行されるかは、オペレーティング システムのスケジューラによって実際に決定されます。スレッドの優先順位は、せいぜい、オペレーティング システムに与えるアドバイスです。つまり、使用する場合と使用しない場合があるヒントです。Linux では長い間、プログラムでスレッドに設定された優先度に関係なく、すべてのスレッドが同じ優先度で実行されていました。

つまり、スレッドの優先度を設定しても、スレッドがいつ実行されるか、またはオペレーティング システムが実際にどのように優先度を設定するかは保証されません。OS がスレッドの優先順位を逆に解釈した場合でも、コードは機能する必要があります。効果的な Java のこのアドバイスを参照してください。

于 2013-10-14T17:50:44.697 に答える
1

Java 言語仕様から:

すべてのスレッドには優先順位があります。処理リソースの競合がある場合、通常、優先度の高いスレッドが優先度の低いスレッドよりも優先して実行されます。ただし、このような優先度は、最も優先度の高いスレッドが常に実行されるという保証ではなく、相互排除を確実に実装するためにスレッドの優先度を使用することはできません

ただし、スレッドは通常の優先度でThread.NORM_PRIORITYあり、値は です5。私のいくつかのテストによると、スレッドがデフォルトとして優先度を持っているため、最初に実行することができますが、 と の間の優先度設定が子スレッドで機能する5ことに気付きました。1Main threadMain5

于 2013-10-14T18:04:41.660 に答える
0

優先順位は、CPU または OS が処理できるよりも多くのスレッドを実行している場合にのみ機能するため、すべてのスレッドが同時に適切に実行されます。

Notify メソッドと Wait メソッドを使用すると、待機中の優先度が最も高いスレッドがキューから優先されます。

したがって、優先度を使用する理由はありますが、優先度の高いスレッドがメソッドを呼び出している場合、下位のスレッドがキューでロックされない可能性があることに注意してください。

于 2013-10-14T17:33:10.943 に答える