-2

私はJavaとマルチスレッドの概念が初めてです。ここに私の実験的なコードがあります:

public class Multithread implements Runnable {

    Thread t;

    public Multithread(int prior, String name) {
        this.t = new Thread(this, name);
        this.t.setPriority(prior);
        this.t.start();
    }

    public void run() {
        for (int i = 1; i <= 5; i++) {
            if (this.t.getName().equals("thread1")) {
                System.out.println("First Child Thread Loop No " + i);
            }
            else {
                System.out.println("Second Child Thread Loop No " + i);
            }

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }
    }

    public static void main(String[] args) {
        new Multithread(10, "thread1");
        new Multithread(7, "thread2");
    }
}

出力は次のとおりです。

First Child Thread Loop No 1
Second Child Thread Loop No 1
First Child Thread Loop No 2
Second Child Thread Loop No 2
Second Child Thread Loop No 3
First Child Thread Loop No 3
Second Child Thread Loop No 4
First Child Thread Loop No 4
Second Child Thread Loop No 5
First Child Thread Loop No 5

さて、私はこのように単純であると期待していました:

First Child Thread Loop No 1
Second Child Thread Loop No 1
First Child Thread Loop No 2
Second Child Thread Loop No 2
First Child Thread Loop No 3
Second Child Thread Loop No 3
First Child Thread Loop No 4
Second Child Thread Loop No 4
First Child Thread Loop No 5
Second Child Thread Loop No 5

最初のスレッドが常に 2 番目のスレッドの前に実行されることを期待しています。私の出力を説明してください。前もって感謝します。

4

3 に答える 3

5

その理由は、スレッドの実行が開始されたときに、スレッドが表示される順序を推測できないためです。非常に基本的なスレッドの問題です。http: //www.codeproject.com/Articles/616109/Java-Thread-Tutorial またはhttp:/ /www.vogella.com/articles/JavaConcurrency/article.html またはその他の基本的なスレッド チューター。幸運を。

于 2013-10-13T10:53:18.497 に答える
0

スレッド化の基本ルール:スレッドがいつ作業を行うかは未定義です。すぐに、しばらくしてから、または 1 時間後になる可能性があります。いかなる保証もありません。

Java でのマルチスレッドについて学びたい場合は、concurrent パッケージに精通することから始めてください。これには、一般的な問題に対してすぐに使用できるツールが含まれています。さらに重要なことは、マルチスレッド ソリューションを処理する方法が付属しており、インテリジェントなコード設計によって、ほとんどの問題を最初から回避できることです。

于 2013-10-13T11:23:32.180 に答える