Java: периодически отправлять данные из потока в основной класс

1

У меня есть поток, который загружает данные из HTTP. Я получаю его от 1 секунды до 10 минут, используя stream API.

После получения данных с HTTP-сервера мне нужно отправить эти данные методу в MyMainClass. Как я могу сделать это без статического метода? Мне не нравится использовать статический метод.

public class MyMainClass {  
    public static void main(String[] args) {            
        GetData getData = new GetData();
        getData.start();        
    }

    public static void useText(String text) {
        System.out.println(text);
        // do something...          
    }
}


public class GetData extends Thread {

    @Override
    public void run() {
        String text;

        /* Download text from HTTP and save it to "text".
         * Every 1 seconds to about 10 minutes using stream API.
         * text= "abc...";
         * If there are no errors, run method never exit.
         */
        MyMainClass.useText(text);

    }
}
Теги:
multithreading

1 ответ

2
Лучший ответ

Сделайте свой метод методом экземпляра и создайте экземпляр класса, который вы можете передать в экземпляр Thread

public static void main(String[] args) {            
    GetData getData = new GetData(new MyMainClass());
    getData.start();        
}

public void useText(String text) {
    System.out.println(text);
    // do something...          
}

В методе run класса GetData вы можете использовать экземпляр MyMainClass в качестве обратного вызова.

public GetData extends Thread {
    public GetData(MyMainClass instance) {
        this.instance = instance;
    }

    private MyMainClass instance;

    @Override
    public void run() {
        String text;

        /* Download text from HTTP and save it to "text".
         * Every 1 seconds to about 10 minutes using stream API.
         * text= "abc...";
         * If there are no errors, run method never exit.
         */
        instance.useText(text);
    }
}
  • 0
    Спасибо, это работает! Но почему вы создаете новый экземпляр MyMainClass в GetData(new MyMainClass()); ? Как поток может использовать метод из начального класса (который запускает поток и основное приложение), если работает с новым экземпляром класса MyMainClass ?
  • 0
    @martin Я не понимаю твой вопрос. Метод является методом экземпляра. Вам нужен экземпляр, чтобы вызвать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню