Ostatnio do drukowania używam pętli z dużymi liczbami Hello World
:
int counter = 0;
while(true) {
//loop for ~5 seconds
for(int i = 0; i < 2147483647 ; i++) {
//another loop because it's 2012 and PCs have gotten considerably faster :)
for(int j = 0; j < 2147483647 ; j++){ ... }
}
System.out.println(counter + ". Hello World!");
counter++;
}
Rozumiem, że jest to bardzo głupi sposób, aby to zrobić, ale nigdy jeszcze nie korzystałem z żadnych bibliotek timerów w Javie. Jak zmodyfikować powyższe, aby drukować co powiedzmy 3 sekundy?
Odpowiedzi:
Możesz również przyjrzeć się klasom
Timer
iTimerTask
klasom, których możesz użyć, aby zaplanować uruchamianie zadania con
sekundę.Potrzebujesz klasy, która rozszerza
TimerTask
i przesłaniapublic void run()
metodę, która będzie wykonywana za każdym razem, gdy przekażesz wystąpienie tej klasy dotimer.schedule()
metody.Oto przykład, który jest drukowany
Hello World
co 5 sekund: -class SayHello extends TimerTask { public void run() { System.out.println("Hello World!"); } } // And From your main() method or any other method Timer timer = new Timer(); timer.schedule(new SayHello(), 0, 5000);
źródło
schedule
metoda 2-param zostanie wykonana raz po określonym czasie. 3-paramschedule
lubscheduleAtFixedRate
należałoby użyć.ExecutorService
do tych zadań. To naprawdę duża poprawa w stosunku do tradycyjnego interfejsu API wątków. Po prostu nie użyłem go w momencie odpowiadania.Timer timer = new Timer(true);
powinien być ustawiony natrue
demona. Chyba że chcesz, aby licznik czasu nadal działał po zamknięciu aplikacji.Jeśli chcesz wykonać zadanie okresowe, użyj pliku
ScheduledExecutorService
. W szczególności ScheduledExecutorService.scheduleAtFixedRateKod:
Runnable helloRunnable = new Runnable() { public void run() { System.out.println("Hello world"); } }; ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(helloRunnable, 0, 3, TimeUnit.SECONDS);
źródło
TimerTask
wariant. Co ciekawe, zauważyłem, że przyjęta odpowiedź jest w rzeczywistości nieprawidłowa: \ Pomijając wiek obu API,ScheduledExecutorService
jest po prostu bardziej intuicyjnie deklaratywny. UżycieTimeUnit
parametru jako parametru sprawia, że jest dużo bardziej jasne, co się dzieje. Dawno minęły czasy, takie jak kod5*60*1000 // 5 minutes
.Runnable helloRunnable = () -> { /*code */ };
to, co jest jeszcze piękniejsze;)Spróbuj to zrobić:
Timer t = new Timer(); t.schedule(new TimerTask() { @Override public void run() { System.out.println("Hello World"); } }, 0, 5000);
Ten kod będzie uruchamiał drukowanie w konsoli Hello World co 5000 milisekund ( 5 sekund). Aby uzyskać więcej informacji, przeczytaj https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html
źródło
Rozumiem to za pomocą timera, mam nadzieję, że to pomoże. Użyłem timera z
java.util.Timer
izTimerTask
tego samego pakietu. Zobacz poniżej:TimerTask task = new TimerTask() { @Override public void run() { System.out.println("Hello World"); } }; Timer timer = new Timer(); timer.schedule(task, new Date(), 3000);
źródło
Możesz użyć
Thread.sleep(3000)
wewnątrz do pętli.Uwaga: będzie to wymagało
try/catch
blokady.źródło
public class HelloWorld extends TimerTask{ public void run() { System.out.println("Hello World"); } } public class PrintHelloWorld { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new HelloWorld(), 0, 5000); while (true) { try { Thread.sleep(2000); } catch (InterruptedException e) { System.out.println("InterruptedException Exception" + e.getMessage()); } } } }
Utworzono nieskończoną pętlę Zadanie harmonogramu reklam zostało skonfigurowane.
źródło
Najprostszym sposobem byłoby uśpienie głównego wątku na 3000 milisekund (3 sekundy):
for(int i = 0; i< 10; i++) { try { //sending the actual Thread of execution to sleep X milliseconds Thread.sleep(3000); } catch(InterruptedException ie) {} System.out.println("Hello world!"): }
Spowoduje to zatrzymanie wątku na co najmniej X milisekund. Wątek może spać dłużej, ale to zależy od JVM. Jedyną gwarantowaną rzeczą jest to, że wątek będzie spał co najmniej przez te milisekundy. Spójrz na
Thread#sleep
dokument:źródło
Thread.sleep
odpowiednie?Zastosowanie
java.util.Timer
iTimer#schedule(TimerTask,delay,period)
metoda pomoże ci.public class RemindTask extends TimerTask { public void run() { System.out.println(" Hello World!"); } public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new RemindTask(), 3000,3000); } }
źródło
Oto prosty sposób korzystania z wątku w java:
for(int i = 0; i< 10; i++) { try { //sending the actual Thread of execution to sleep X milliseconds Thread.sleep(3000); } catch(Exception e) { System.out.println("Exception : "+e.getMessage()); } System.out.println("Hello world!"); }
źródło
Co on powiedział. Możesz obsłużyć wyjątki w dowolny sposób, ale Thread.sleep (miliseconds); to najlepsza trasa.
public static void main(String[] args) throws InterruptedException {
źródło
Oto kolejny prosty sposób użycia interfejsu Runnable w konstruktorze wątków
public class Demo { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 5; i++){ try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Thread T1 : "+i); } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 5; i++) { try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Thread T2 : "+i); } } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 5; i++){ try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Thread T3 : "+i); } } }); t1.start(); t2.start(); t3.start(); } }
źródło
Dodaj
Thread.sleep
try { Thread.sleep(3000); } catch(InterruptedException ie) {}
źródło
W przypadku małych aplikacji dobrze jest używać Timer i TimerTask, jak wspomniał Rohit, ale w aplikacjach internetowych użyłbym Quartz Scheduler do planowania zadań i wykonywania takich okresowych zadań.
Zobacz samouczki dotyczące planowania Quartz.
źródło
public class TimeDelay{ public static void main(String args[]) { try { while (true) { System.out.println(new String("Hello world")); Thread.sleep(3 * 1000); // every 3 seconds } } catch (InterruptedException e) { e.printStackTrace(); } } }
źródło