【问题标题】:How to return a value from Infinite Loop?如何从无限循环返回一个值?
【发布时间】:2021-05-02 11:35:48
【问题描述】:

我有一个疑问,这对许多人来说可能是微不足道的。
我无法理解如何从无限运行的循环中返回值?(如果可能)

我已经浏览了互联网上的各种来源,他们都建议使用 多线程 .


但遗憾的是,我无法理解线程在这种情况下如何提供帮助。
这是我希望实现的模拟功能:-
void processReturnedValue(){
    for(;;){
        String currentTime = retrieveCurrentTime(); 
        doSomethingWithReturenedValue(currentTime);
        delay(15000); // function to incur delay for 15 Seconds
   }
}

String retrieveCurrentTime(){
     for(;;){
         return currentDateTime.getDayOfYear()+ "_" + currentDateTime.getHour() + "_" +    currentDateTime.getMinute() + "_" + currentDateTime.getSecond();
     delay(15000); // function to incur delay for 15 Seconds
   }
}

如果有人能对我的疑问有所了解,我将非常感激。
如果可能,请提供一个关于我的小型工作模拟示例。
在期待中感谢你。

【问题讨论】:

  • 为什么你需要retrieveCurrentTime里面的循环?您不能在调用时返回当前时间吗?
  • 不。我模拟了我的需求,我需要每隔 15 秒处理一次数据并将其返回给调用者函数。
  • retrieveCurrentTIme 方法中的 for 语句不循环。它只会执行一次,并将完成返回语句。 deelay(15000) 在这段代码中是无法访问的。
  • 是的,这就是我想要的@Kamil,虽然使用了返回,但我不希望它返回
  • @ArchiacCoder processReturnedValue 已经每 15 秒调用一次 retrieveCurrentTime。您无需在retrieveCurrentTime 内再延迟 15 秒。

标签: java multithreading infinite-loop


【解决方案1】:

不返回,而是将值分配给共享变量:

private final AtomicReference<String> currentTime = new AtomicReference<>();

// Thread 1:
void processReturnedValue() {
    for(;;) {
        doSomethingWithReturenedValue(currentTime.get());
        delay(15000); // function to incur delay for 15 Seconds
   }
}

// Thread 2:
String retrieveCurrentTime() {
    for(;;) {
        currentTime.set(currentDateTime.getDayOfYear()+ "_" + currentDateTime.getHour() + "_" +    currentDateTime.getMinute() + "_" + currentDateTime.getSecond());
        delay(15000); // function to incur delay for 15 Seconds
    }
}

【讨论】:

  • 感谢您的帮助。我觉得我需要采用这种方法。
猜你喜欢
  • 2018-07-03
  • 2016-01-30
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多