PartitionKey извлеченный из документа не совпадает с указанным в заголовке c #

Вы всегда должны заканчивать потоки, проверяя флаг в цикле run() (если есть).

Ваша нить должна выглядеть так:

public class IndexProcessor implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class);
    private volatile boolean execute;

    @Override
    public void run() {
        this.execute = true;
        while (this.execute) {
            try {
                LOGGER.debug("Sleeping...");
                Thread.sleep((long) 15000);

                LOGGER.debug("Processing");
            } catch (InterruptedException e) {
                LOGGER.error("Exception", e);
                this.execute = false;
            }
        }
    }

    public void stopExecuting() {
        this.execute = false;
    }
}

Тогда вы можете завершите поток, вызвав thread.stopExecuting(). Таким образом, поток заканчивается чистым, но это занимает до 15 секунд (из-за вашего сна). Вы все равно можете вызвать thread.interrupt (), если это действительно актуально, но предпочтительный способ всегда должен проверять флаг.

Чтобы не ждать 15 секунд, вы можете разделить сон следующим образом:

        ...
        try {
            LOGGER.debug("Sleeping...");
            for (int i = 0; (i < 150) && this.execute; i++) {
                Thread.sleep((long) 100);
            }

            LOGGER.debug("Processing");
        } catch (InterruptedException e) {
        ...
0
задан r3plica 15 January 2019 в 22:56
поделиться