У меня есть FOR, и внутри него я запускаю несколько TIMERS
Это неверное утверждение, java .util.Timer - это служебный класс, который можно использовать для планирования потока будет выполняться в определенное время в будущем.
timer.schedule(100, interval) {}
Приведенная выше строка не блокирует для l oop, таймер запланирован для запуска в потоке, а для l oop продолжается выполните следующую итерацию.
Вероятно, вам нужно блокирующее решение, чтобы выполнить их один за другим
for (i in 1..3) {
println("running for loop: $i")
val interval: Long = 60 * 1000 * 1 // 1 minute
Thread.sleep(100)
var isRunning = true
while(isRunning) {
println("${LocalTime.now()} to loop: $i")
Thread.sleep(interval)
// some logic here do stop the timer
// if (something happens) isRunning = false
}
}
Но, вероятно, это не лучшая практика, поскольку ваш поток просто заблокировав, вы можете использовать сопрограммы для этого, не тратя свои системные ресурсы, блокируя потоки:
fun main() = runBlocking {
launch {
for (i in 1..3) {
println("running for loop: $i")
val interval: Long = 60 * 1000 * 1 // 1 minute
delay(100)
var isRunning = true
while(isRunning) {
println("${LocalTime.now()} to loop: $i")
delay(interval)
// some logic here do stop the timer
// if (something happens) isRunning = false
}
}
}
// ...
// do sth in main without blocking, these all things run on same thread
// none of the code is blocked
}