0

まず、私はこれまでスレッドを使用したことがないので、用語が緩いことをお許しください。似ているが異なる 3 つのクラスがあり、すべてインターネットから情報を読み取る必要があるため、プログラムがオンラインで取得したもののローカル コピーを使用している間、バックグラウンドで実行されるスレッドを作成したいと考えました。ただし、各クラスには独自の特別な入力が必要なため、メインの実行可能なクラスを 1 つ作成することはできません。

質問: プログラムごとに 1 つずつ、3 つの別個のスレッドを作成する必要がありますか?それとも、各クラスに Runnable Thread を埋め込むことができますか? どうすればいいのですか?

助けてくれてありがとう

ps。私のプログラム (少なくともそのバージョン) を見たい場合は、jacobfakult.50webs.com/quizzes/program にアクセスしてください。

4

3 に答える 3

0
    /*
     * i dont understand totally what your point is, but assume
     * we have 3 classes that needs to use one Runnable task ...
     * Threads are Runnable ... any way, so
     */

    // create your runnable task
    class ReadDataOnline implements Runnable{

        @Override
        public void run() {
            // read data from the internet and update something or what ever
        }
    }


    // create your classes that will use this task
    class ClassOne{
        private ReadDataOnline runnable = null;
        private Thread reader = null;

        ClassOne(ReadDataOnline runnable){
            this.runnable = runnable;
            reader = new Thread(runnable);
        }

        void useTask(){
            // start your new Thread in the background, which will use
            // the Runnable task in the parameter
            reader.start();
        }
    }

    class ClassTwo {
        private ReadDataOnline runnable = null;
        private Thread reader = null;

        ClassTwo(ReadDataOnline runnable) {
            this.runnable = runnable;
            reader = new Thread(runnable);
        }

        void useTask() {
            // start your new Thread in the background, which will use
            // the Runnable task in the parameter
            reader.start();
        }
    }

    class ClassThree {
        private ReadDataOnline runnable = null;
        private Thread reader = null;

        ClassThree(ReadDataOnline runnable) {
            this.runnable = runnable;
            reader = new Thread(runnable);
        }

        void useTask() {
            // start your new Thread in the background, which will use
            // the Runnable task in the parameter
            reader.start();
        }
    }


    class MainClass{

        public void doStuff(){

            ReadDataOnline runnable = new ReadDataOnline();

            // use the same runnable task in the three classes
            ClassOne classOne = new ClassOne(runnable);
            ClassTwo classTwo = new ClassTwo(runnable);
            ClassThree classThree = new ClassThree(runnable);

            // let classOne start using the Task
            classOne.useTask();

            // now the Task status is updated/modified by classOne,
            // let classTwo use the task in it's new state
            classTwo.useTask();

            // and so on
            classThree.useTask();

            /*
             * since we are not talking about a specefic case, i cant tell
             * what is the task or what to do with it, but put in mind that
             * synchronizing your methods is very important since multi-threading
             * doesnt guarantee the order of the threads, and also they wont
             * be synchronized with each other unless your methods are synchronized 
             * (or you use synchronization blocks)
             */

            // i know this example isnt very good, but at least it shows how to use
            // the same task in multiple Threads or classes that are backed with
            // different threads



        }


    }
于 2013-09-20T20:09:54.567 に答える