Программа на Java продолжает работать: бот Telegram, запланированный ScheduledExecutorService, продолжает отправлять сообщения даже после завершения - PullRequest
0 голосов
/ 20 мая 2019

У меня есть бот, который сначала создает массив сообщений, а затем отправляет эти сообщения на канал. Программа использует ScheduledExecutorService и существует два Runnable s и два потока: первый поток заполняет массив, второй отправляет запросы, если массив не пустой. После запроса сообщение должно быть удалено из массива. Сообщение содержит текст и gif:

public class BotTest {
    private static final ScheduledExecutorService scheduler =
            Executors.newScheduledThreadPool(2);


    public static void main(String[] args) throws Exception {
        final MyBot bot  = new MyBot();


        ArrayList<Message> messages = new ArrayList<>();
        Runnable createMessages =
                new Runnable(){
                    public void run(){
                      //...creating messages
                    }
                };
        scheduler.scheduleAtFixedRate(createMessages, 0, 1, TimeUnit.MINUTES);

        scheduler.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                    //if (messages.size()<=0)  {                   
                    while (messages.size()<=0)  {
                        System.out.println("Array is empty");
                    }
                    //else  {
                    try {
                        final Message message = messages.get(0);
                        messages.remove(0);

                        bot.sendMessage(message);
                    } 
                    catch (Throwable e) {
                        e.printStackTrace();
                    }
                    //}
            }
        }, 0, 1, TimeUnit.SECONDS);


    }
}

sendMessage

public int sendMessage(Message message) throws Exception  {
                boolean result = false;

                String linkText = rootLink + token + "/sendMessage?chat_id=@MyChat&text=" + message.getText();
                String linkGif = rootLink + token + "/sendAnimation?chat_id=@MyChat&animation=" + URLEncoder.encode(message.getUrl(), "UTF-8");

                int responseCode1 = new TelegramRequest(linkText).send().getCode();
                int responseCode2 = new TelegramRequest(linkGif).send().getCode(); 

                //...logging in text file

                return responseCode1 + responseCode2;
}

Мой компьютер (Windows 7, IDE Intellij) продолжает отправлять сообщения, хотя я уже давно (несколько часов назад) прекратил процесс. Если я отключу интернет-соединение на моем компьютере, сообщения перестанут отправляться - пока я не включу его снова. Что происходит и как мне это остановить?

У меня также ведется логирование: для каждого сообщения запись делается в текстовом файле. Тем не менее, никаких записей не делается для этих непрерывных запросов. Это заставляет меня думать, что происходит какое-то кэширование, и эти запросы каким-то образом помещаются в какую-то очередь и только сейчас отправляются ...

...