Я хотел бы сделать поток безопасным для длинных значений

#java #multithreading #spring-boot #performance #java-8

Вопрос:

У меня есть запланированный метод с целочисленными значениями с условиями, а также длинными значениями для проверки этих условий, Мой код работает, однако я хотел бы сделать потокобезопасным для длинных значений, Я нашел AtomicInteger, но я не знаю, как применить его к своему коду;

Мой код ниже;

Файл Yaml;

   listenForInfo: 20000
  listenForWarn: 30000
  listenForError: 40000
  listenScheduled: 1000
 

Мой основной код;

     @Value("${listenForInfo}")
    private int listenForInfo;

    @Value("${listenForWarn}")
    private int listenForWarn;

    @Value("${listenForError}")
    private int listenForError;
    
    private long lastReceivedMessage = System.nanoTime();

    

  @KafkaListener(topics = "#{'${kafka.topic}'}", groupId = "#{'${kafka.groupid}'}")
public void consume(String message, @Header(KafkaHeaders.RECEIVED_PARTITION_ID) Integer partition,
                    @Header(KafkaHeaders.OFFSET) Long offset, Acknowledgment ack) {

    logger.info("offset = {} ", offset);
    logger.info("partition = {} ", partition);
    logger.info("kafka Message  : {}", message);

    lastReceivedMessage = System.nanoTime();

    try {
        service.processMessage(message, ack, null);

    } catch (ParseException e) {
        logger.error(e.getMessage());
    }
}
   

    @Scheduled(fixedDelayString = "${listenScheduled}", initialDelay = 1000)
    private void distanceBetweenLastReceivedMessageAndCurrentTime() {

      long  currentTime = (System.nanoTime() - lastReceivedMessage) / 1000000;

        logger.info("current time : {}", currentTime);

        if (currentTime >= listenForInfo amp;amp; currentTime < listenForWarn) {
            EventUtil.publishEvent("event info ", EventSeverityStatus.INFO, EventTypeStatus.CUSTOM, null);
    
        }

        if (currentTime >= listenForWarn amp;amp; currentTime < listenForError) {
            EventUtil.publishEvent("event warn ", EventSeverityStatus.WARN, EventTypeStatus.CUSTOM, null);

        
        }

        if (currentTime >= listenForError) {
            EventUtil.publishEvent("event error ", EventSeverityStatus.ERROR, EventTypeStatus.CUSTOM, null);

        }
    }
 

Комментарии:

1. Нужно больше объяснений для > Я хотел бы сделать потокобезопасным для длинных значений

2. Спасибо, что я отредактировал

3. в чем проблема, которую вы пытаетесь решить? Я не думаю, что использование AtomicInteger или AtomicLong что-нибудь здесь исправит

4. Есть ли какая-либо причина currentTime , по которой это не локальная переменная?

5. Таким образом, вы ожидаете ответов относительно потокобезопасности вашей программы, не показывая соответствующие части?