Цикл While грузит процессор на 100% проблемка!!!

 
 
 
Сообщения:82
1. Есть метод main(String args[]){ }
2. В нем бесконечный while(true) который проверяет CurrentMinutes==SettedMinuted;
Вопрос: как этого избежать. Дело в том, что я так и не понял [как юзать Schedule]- как поставить срабатывание метода MyMethode() в определенное время?Есть рабочий код для этого? Благодарю за внимание!

Yn=Xn {n: 1, 2, ... 54}
 
 
Сообщения:176
package ocp7;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExample {

    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        LocalDateTime startTime = LocalDateTime.of(2019, Month.JUNE, 22, 10, 30);
        long delayMs = Duration.between(LocalDateTime.now(), startTime).toMillis();
        service.schedule(new Task(), delayMs, TimeUnit.MILLISECONDS);
    }
}

class Task implements Runnable {

    @Override
    public void run() {
        System.out.println("Hello World!");
    }
}


В реальном приложении важно, перед тем как потерять ссылку на service, его нужно завершить вызвав метод service.shutdown(), иначе будет утечка памяти. Ну и ещё вдобавок приложение не сможет завершиться.

ScheduledExecutorService service = null;
try {
    service = Executors.newSingleThreadScheduledExecutor();
    // ...
} finally {
    if (service != null) {
        service.shutdown();
    }
}
Изменен:22 июн 2019 05:34
 
 
Сообщения:82
Слава Богу простил!!!Аминь!!!!
Исправил:
LocalDateTime startTime = LocalDateTime.of(2019, Month.JUNE, 19, 32, 00); 

на:
LocalDateTime startTime = LocalDateTime.of(2019, Month.JUNE, 22, 19, 32, 00); 
//(2019.06.22 19:32:00)//День Месяца Нужно было указать;

//
Заработало. Теперь все верно?
package j;
 
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
 
public class J {
 
    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        LocalDateTime startTime = LocalDateTime.of(2019, Month.JUNE,22, 19, 32, 00);
        long delayMs = Duration.between(LocalDateTime.now(), startTime).toMillis();
        service.schedule(new Task(), delayMs, TimeUnit.MILLISECONDS);
        
    }
}
 
class Task implements Runnable {
 
    @Override
    public void run() {
        System.out.println("My Task done!");
        ScheduledExecutorService service = null;
try {
    service = Executors.newSingleThreadScheduledExecutor();
    // ...
} finally {
    if (service != null) {
        service.shutdown();
    }
}       
    }
}

Yn=Xn {n: 1, 2, ... 54}
Изменен:22 июн 2019 14:40
 
 
Сообщения:176
В методе Task::run() содержится только код задачи.

package ocp7;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExample {

    public static void main(String[] args) {
        ScheduledExecutorService service = null;
        try {
            service = Executors.newSingleThreadScheduledExecutor();
            LocalDateTime startTime = LocalDateTime.of(2019, Month.JUNE, 22, 21, 02);
            long delayMs = Duration.between(LocalDateTime.now(), startTime).toMillis();
            service.schedule(new Task(), delayMs, TimeUnit.MILLISECONDS);
        } finally {
            if (service != null) {
                service.shutdown();
            }
        }
    }
}

class Task implements Runnable {

    @Override
    public void run() {
        System.out.println("My Task done!");
    }
}
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет