Как запустить поток из метода Main в приложении Java? - PullRequest
4 голосов
/ 30 июля 2011

Я полагаю, что переменные, используемые в методе 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 ]

12 голосов
/ 30 июля 2011

Вы не можете использовать this, потому что main - это статический метод, this относится к текущему экземпляру, а его нет. Вы можете создать объект Runnable, который вы можете передать в поток:

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

Это приведет к тому, что все, что вы добавите в метод run класса Server, будет выполнено myThread.

Здесь есть два отдельных понятия: Поток и Runnable. Runnable определяет, какую работу необходимо выполнить, Thread - это механизм, который выполняет Runnable. Хотя в Thread есть метод run, который вы можете расширить, вы можете игнорировать его и использовать отдельный Runnable.

3 голосов
/ 30 июля 2011

Изменить 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());



    }


}
0 голосов
/ 30 июля 2011
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();
    }
}
...