Bibi's DevLog ๐Ÿค“๐ŸŽ

[Java] ์Šค์ผ€์ค„๋Ÿฌ : ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐ˜๋ณต์‹คํ–‰ - Timer, TimerTask, .scheduleAtFixedRate() ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Java ์ž๋ฐ”

[Java] ์Šค์ผ€์ค„๋Ÿฌ : ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐ˜๋ณต์‹คํ–‰ - Timer, TimerTask, .scheduleAtFixedRate()

๋น„๋น„ bibi 2020. 11. 17. 18:17

ํ•œ๊ธ€์‹œ๊ณ„ ์˜ˆ์ œ๋ฅผ ํ’€๋ฉฐ ์ฐพ์€ ์ž๋ฐ” - ์ผ์ •์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐ˜๋ณต์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•(์Šค์ผ€์ค„๋Ÿฌ) ์„ ์ •๋ฆฌํ•ด ๋‘”๋‹ค.

์ฐธ๊ณ ํ•œ ๊ณณ๋“ค
javacan.tistory.com/entry/29
http://oniondev.egloos.com/9678784
https://hamait.tistory.com/211
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™‡โ€โ™‚๏ธ


์ž๋ฐ”์—์„œ ์–ด๋–ค ์ž‘์—…์„ ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” java.util.Timer ํด๋ž˜์Šค์™€ java.util.TimerTask ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
Timerํด๋ž˜์Šค๋Š” .scheduleAtFixedRate()์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ TimerTask๋กœ ์ •์˜๋œ ์ž‘์—…์„ ๋ฐ˜๋ณต ์‹คํ–‰ํ•œ๋‹ค.

Timer ํด๋ž˜์Šค

import java.util.Timer; ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ,
Timer scheduler = new Timer(); ๋กœ ์ดˆ๊ธฐํ™”ํ•ด ์‚ฌ์šฉ.

TimerTask ํด๋ž˜์Šค

import java.util.TimerTask; ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ,
TimerTask task = new TimerTask() { @Override }๋กœ ์‚ฌ์šฉ.
@Override ์•„๋ž˜์— ์ •์˜๋œ run()๋ฉ”์†Œ๋“œ๊ฐ€ task๋กœ ์‹คํ–‰๋œ๋‹ค.
(์‚ฌ์‹ค ์•„์ง ์˜ค๋ฒ„๋ผ์ด๋“œ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ TimerTask ์ดˆ๊ธฐํ™”๋งŒ ํ–ˆ๋Š”๋ฐ๋„ ์ž๋™์™„์„ฑ์ด ๋˜์–ด ์ฃผ์—ˆ๋‹ค - ์ธํ…”๋ฆฌJํ™˜๊ฒฝ)

.scheduleAtFixedRate() ๋ฉ”์„œ๋“œ

  1. (void) scheduleAtFixedRate(TimerTask task, long delay, long period)
    delay(์ผ์ • ์‹œ๊ฐ„)์ด ์ง€๋‚œ ํ›„์— period(์‹œ๊ฐ„ ๊ฐ„๊ฒฉ)์œผ๋กœ task(์ž‘์—…)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  1. (void) .scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
    firstTime(์ง€์ • ๋‚ ์งœor์‹œ๊ฐ„) ๋ถ€ํ„ฐ ์‹œ์ž‘, period(์‹œ๊ฐ„๊ฐ„๊ฒฉ) ๋งˆ๋‹ค task(์ž‘์—…)๋ฅผ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค.

โ—
long ํƒ€์ž…์˜ period์™€ delay๋Š” 1000 = 1์ดˆ ๋กœ ํ™˜์‚ฐํ•ด ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 10์ดˆ ๋’ค 1๋ถ„๋งˆ๋‹ค ๋Œ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด delay์—๋Š” 10000, period์—๋Š” 60000 ์„ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

โ€ป.scheduleAtFixedRate()์˜ ๋„ค ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ(TimeUnit.Minute)๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•˜๋˜๋ฐ, ๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ๊ทธ๋ƒฅ ์ง€์› ๋‹ค.

์œ„์˜ ํด๋ž˜์Šค๋“ค๊ณผ ๋ฉ”์„œ๋“œ(1.)๋ฅผ ํ™œ์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐ˜๋ณต์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์งœ ๋ณด์•˜๋‹ค.

// ...
import java.util.Timer;
import java.util.TimerTask;

public class HangeulClock {
    public static void main(String[] args) {
        HangeulClock hangeulClock = new HangeulClock();
        Timer scheduler = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                String[][] clockResult = hangeulClock.showHourMinute();
                hangeulClock.printHangeulClock(clockResult);
            }
        };
        scheduler.scheduleAtFixedRate(task, 1000, 60000); // 1์ดˆ ๋’ค 1๋ถ„๋งˆ๋‹ค ๋ฐ˜๋ณต์‹คํ–‰
    }
 // codes ...   
 }