如何在Java应用程序中从Main方法运行线程?

时间:2011-07-29 20:03:13

标签: java multithreading java-threads

我认为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);



    }


}

3 个答案:

答案 0 :(得分:12)

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

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

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

这里有两个独立的概念,Thread和Runnable。 Runnable指定需要完成的工作,Thread是执行Runnable的机制。虽然Thread有一个可以扩展的run方法,但你可以忽略它并使用一个单独的Runnable。

答案 1 :(得分: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());



    }


}

答案 2 :(得分: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();
    }
}