2

教師のマルチスレッドの方法を理解するのに苦労しています。両方の例を示す前に、彼はたくさんの初心者 (私を含むと思います ^.^) を教えていると言わなければなりません。また、私は彼のクラスを訪問していませんが、次のような彼のスクリプトを持っています。

彼は次のようにマルチスレッドを実行しています。

class MyThread implements Runnable {

Thread t;

MyThread() {

    t = new Thread(this, "Demo");
    t.start();
}

public void run() {

    try {

        for (int i = 5; i > 0; i--) {

            System.out.println("Child-Thread:" + i);
            Thread.sleep(1000);
        }
    } catch (InterruptedException e) {
        System.out.println("Child interrupted");
    }
    System.out.println("Child finished");
}

}

私はそれがよりきれいだと思います:

public class Aufg1 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    MyThread t1 = new MyThread(1);

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
    executor.schedule(t1, 1, TimeUnit.SECONDS);
}

static class MyThread implements Runnable {

    int number;

    public MyThread(int number) {
        this.number = number;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 5; i > 0; i--) {
            System.out.println("Thread " + number + ": " + i);
        }
    }


}
}

サイズ 5 の Thread-Pool を使用した理由は気にしないでください。別の演習でそれが必要だったからです。また、この例では、単一の実行に ThreadPool を使用できました。

大きな違いはありますか?さらにクリーンな方法はありますか?ここでは 1 つだけを示しましたが、他にもマルチスレッド化する方法がいくつかあることは知っています。

ありがとう!

4

3 に答える 3

8

実行可能なクラスの名前にスレッドを含む名前を付けることはしません。少し混乱します。

それ以外では、あなたは Java 同時実行パッケージを使用しています。彼は、このパッケージが構築されている下位レベルのスレッド クラスを使用しています。おそらく、走り方を学ぶ前に歩き方を学ばなければならないからです。:)

于 2013-06-10T07:16:14.063 に答える
3

スレッドには多くの実装がありますが、最も簡単なのはスレッド自体であり、runnable の基本的な実装です。彼のポイントは、スレッドとは何かを理解することだけだと思います。あなたのキャリアでは、スレッドをツールとして必要とし、その内部の仕組みを知ってから、自分に合った最適な実装を使用する必要があります。

Executor とスレッドの両方が 1 つ以上 (executor の場合) を作成します。Executor は通常、明示的にスレッドを作成する代わりに使用されます。*

いずれにせよ、個人的なアドバイスとして、スレッドの新しい使用方法に焦点を当て続けることをお勧めします。それぞれの実装がさまざまな問題に対して優れているからです。

于 2013-06-10T07:17:11.850 に答える
3

初心者にマルチスレッドを教えてきた私は、要点を示すために洗練されていないコードを (少なくとも 1 回は) 書いたことがあることを認めなければなりません。

この例は、 sleep メソッドが人工的な方法で何をするかを示しているようです - あなたのコードはそうではありません。先生はおそらく、コードに何らかの説明を含めているはずです。

大きな違いはありますか?さらにクリーンな方法はありますか?ここでは 1 つだけを示しましたが、他にもマルチスレッド化する方法がいくつかあることは知っています。

それはあなたが何を達成しようとしているかによって異なります。他の人が言ったように、マルチスレッドを行うにはさまざまな方法があります。コードの動作はわずかに異なるため、違いがありますが、一度が「よりクリーン」であるという意味ではありません。これは人為的な例 (5 つまで数えます) であるため、「最もクリーンな」または「最良の」方法が何であるかを実際に言うことはできません。

于 2013-06-10T08:30:04.053 に答える