2

スレッドが関係する Uni の課題について助けが必要です。割り当てでは、4 つのスレッドを含むプログラムを実装する必要があり、それらのスレッドの 1 つに別のスレッドが含まれています。それをよりよく説明するために、以下の図を作成しました。

ここに画像の説明を入力

これを行うための最良/効率的な方法は何ですか? 私の教授はスレッドについて非常に限定的な説明をしました。これまで Web で収集したものから、Runnable インターフェイスを実装し、メイン プログラムの run() メソッド内から 4 つのクラスを作成する必要があります。私はまだJavaのスレッドの概念を完全に理解していないので、混乱しています。誰かが私がもっと学ぶことができるリソースを提案できる場合は、ここに投稿してください.

これまでの私の理解の例を次に示します。

public class MainThread implements Runnable
{
/**
 * The run method from the Runnable interface that
 * executes the entire program.
 */
public void run()
{
    class Controller implements Runnable
    {
        public void run() 
        {
            class MiniWalker implements Runnable
            {
                public void run ()
                {
                }
            }
        }

    }

    class ObjectWalker implements Runnable
    {
        public void run ()
        {   
        }
    }

    class GroupWalker implements Runnable
    {
        public void run ()
        {               
        }
    }

    class YearWalker implements Runnable
    {
        public void run ()
        {           
        }
    }
}

/**
 * The heart and core of this assignment.
 */ 
public static void main(String[] args) 
{
    (new Thread(new MainThread ())).start();
}

}
4

4 に答える 4

3

スレッドには他のスレッドは含まれていません。スレッドは他のスレッドを制御できますが、それはまったく異なります。制御図は、クラス階層に直接関連している必要はありません。

于 2012-07-11T17:34:40.347 に答える
1

Brian Goetz の「Java Concurrency In Practice」を読んで、java.util の下の並行処理クラス (Executor など) を掘り下げることをお勧めします。彼らは生のスレッドよりもあなたの人生をより良くします.

于 2012-07-11T17:33:36.240 に答える
0

開始するのに適した場所はhttp://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.htmlです。これにより、Javaでの並行性の基本的な理解が得られます。このスレッドが何をするのか(なぜそれらを作成する必要があるのか​​)を説明せずに、どの選択が最適であるかを書くのは困難です。

新しいクラスを明示的にコーディングしなくてもスレッドを生成できることは言及する価値があります。

public static void main(String[] args) {
    new Thread(new Runnable() {
        @Override
        public void run() {

        }
    }).start();
}
于 2012-07-11T17:36:07.490 に答える
0

Doug Lee によるConcurrent Programmingも優れたリソースです (Google Books では実質的にすべて無料です)。ExecutorServiceまたはForkJoinPoolも検討する価値があります。また、かなりまともなjavadocsを読んでください。

アプリケーションを本質的にタスクとなるものに分割し、それらをスレッド プールに投げ込むことを試みる価値があるかもしれません。

于 2012-07-19T17:15:18.933 に答える