5

static mainメソッドで使用される変数もstatic同様である必要があると思います。問題はthis、この方法ではまったく使用できないことです。正しく覚えていれば、commnadでスレッドを開始する必要がありmyThread = new ThreaD(this)ます。

以下のコードは、thisスレッドの開始に使用したため、エラーが発生します。私はここで何を間違えましたか?

package app;

public class Server implements Runnable{

    static Thread myThread;


    public void run() {
        // TODO Auto-generated method stub  
    }

    public static void main(String[] args) {
        System.out.println("Good morning");

        myThread = new Thread(this);



    }


}
4

3 に答える 3

12

thismainは静的メソッドでthisあり、現在のインスタンスを参照し、存在しないため、使用できません。スレッドに渡すことができるRunnableオブジェクトを作成できます。

myThread = new Thread(new Server());
myThread.start();

これにより、Serverクラスのrunメソッドに入力したものがすべてmyThreadによって実行されます。

ここには、スレッドとランナブルという2つの別個の概念があります。Runnableは、実行する必要のある作業を指定します。スレッドは、Runnableを実行するメカニズムです。Threadには拡張可能なrunメソッドがありますが、それを無視して別のRunnableを使用することができます。

于 2011-07-29T20:05:54.443 に答える
3

new Thread(this)に変更new Thread(new Server())

package app;

public class Server implements Runnable{

    static Thread myThread;


    public void run() {
        // TODO Auto-generated method stub  
    }

    public static void main(String[] args) {
        System.out.println("Good morning");

        myThread = new Thread(new Server());



    }


}
于 2011-07-29T20:10:24.913 に答える
0
class SimpleThread extends Thread {
    public SimpleThread(String name) {
        super(name);
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " thread: " + getName());
            try {
                sleep((int)(Math.random() * 1000));
            } catch (InterruptedException e) {}
        }
        System.out.println("DONE! thread: " + getName());
    }
}

class TwoThreadsTest {
    public static void main (String[] args) {
        new SimpleThread("test1").start();
        new SimpleThread("test2").start();
    }
}
于 2011-07-29T20:05:22.180 に答える