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

你不能使用this,因为 main 是一个静态方法,this引用当前实例并且没有。您可以创建一个可传递给线程的 Runnable 对象:

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

这将导致您在 Server 类的 run 方法中放置的任何内容都由 myThread 执行。

这里有两个独立的概念,Thread 和 Runnable。Runnable 指定需要完成哪些工作,Thread 是执行 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 回答