CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์˜ Thread.sleep() ๋ฉ”์†Œ๋“œ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์˜ Thread.sleep() ๋ฉ”์†Œ๋“œ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
Java ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ๋Š” java.lang.Thread.sleep() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Thread.sleep() ๋ฉ”์„œ๋“œ

Thread ํด๋ž˜์Šค๋Š” Java.lang ํŒจํ‚ค์ง€์— ์žˆ์œผ๋ฉฐ Thread.sleep() ๋ฉ”์„œ๋“œ ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค . Java.lang.thread sleep() ๋ฉ”์„œ๋“œ๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ) ๋™์•ˆ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Oracle ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด Thread ํด๋ž˜์Šค ์˜ ๋‘ ๊ฐ€์ง€ ์˜ค๋ฒ„๋กœ๋“œ๋œ sleep() ๋ฉ”์„œ๋“œ ๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

static void sleep(long millis)
์—ฌ๊ธฐ์„œ millis๋Š” ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์Šคํ…œ ํƒ€์ด๋จธ ๋ฐ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ •๋ฐ€๋„์— ๋”ฐ๋ผ ๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ์ž ์ž๊ธฐ(์ผ์‹œ์ ์œผ๋กœ ์‹คํ–‰ ์ค‘์ง€, "์ˆ˜๋ฉด") ์ƒํƒœ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐ€๋ฆฌ์ดˆ์— ๋Œ€ํ•œ ์ธ์ˆ˜ ๊ฐ’์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด IllegalArgumentException ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

static void sleep(long millis, int nanos)
์—ฌ๊ธฐ์„œ mills๋Š” ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„์ด๊ณ  nanos๋Š” ๋‚˜๋…ธ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ๋ณ€ํ˜•์€ ์ •ํ™•ํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ ๋ฐ ๋‚˜๋…ธ์ดˆ) ๋™์•ˆ ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋…ธ์ดˆ ๊ฐ’์€ 0์—์„œ 999999 ์‚ฌ์ด์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค . Thread.sleep() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 5์ดˆ ๋™์•ˆ ๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

public class SleepDemo {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " milliseconds");
       }
}
์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‚˜์š”? ๋จผ์ € ์‹œ์ž‘๋œ ๋‹ค์Œ 5๋ฐ€๋ฆฌ์ดˆ(5์ดˆ) ๋™์•ˆ ํœด๋ฉด ์ƒํƒœ๊ฐ€ ๋œ ๋‹ค์Œ ์ฝ˜์†”์— ์–ผ๋งˆ๋‚˜ ์˜ค๋žซ๋™์•ˆ ์ •์ง€๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•œ ๋‹ค์Œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์Šค๋ ˆ๋“œ๊ฐ€ 5008๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ์ผ์‹œ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.
๋ณด์‹œ๋‹ค์‹œํ”ผ ํ”„๋กœ๊ทธ๋žจ์€ 5์ดˆ ๋™์•ˆ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์กฐ๊ธˆ ๋” ๊ธธ๊ฒŒ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด 5000๋ฐ€๋ฆฌ์ดˆ ์ด์ƒ ๋™์•ˆ ์Šค๋ ˆ๋“œ ์‹คํ–‰์„ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ 5008๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ ์€ ๋ชจ๋“  ๊ฒƒ์ด ์šด์˜ ์ฒด์ œ์™€ ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋Ÿฌ์˜ ํŠน์ • ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜์„œ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋Œ€๊ธฐํ•˜๋Š” ์‹ค์ œ ์‹œ๊ฐ„์€ ์‹œ์Šคํ…œ ํƒ€์ด๋จธ์™€ ์Šค์ผ€์ค„๋Ÿฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์กฐ์šฉํ•œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์‹ค์ œ ์ ˆ์ „ ์‹œ๊ฐ„์€ ์ง€์ •๋œ ์ ˆ์ „ ์‹œ๊ฐ„์— ๊ฐ€๊น์ง€๋งŒ ๋กœ๋“œ๋œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์•ฝ๊ฐ„ ๋” ๊น๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์–ด๋–ค ์ž‘์—…์„ ํ•ญ์ƒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ์ž์ฃผ๋Š” ์•„๋‹Œ ๊ฒฝ์šฐ ์ž์‹ ์Šค๋ ˆ๋“œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋งค์ดˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ ˆ๋Œ€ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

public class SleepDemo1 {

   public static void main(String[] args) throws InterruptedException {
       while (true)
       {
           Thread.sleep(1000);
           System.out.println("One more second");
       }
   }
}

Java Thread Sleep์˜ ์ค‘์š” ์‚ฌํ•ญ

Java Thread Sleep ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค .
  • ํ•ญ์ƒ ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์ œ ์Šค๋ ˆ๋“œ๋Š” ๊นจ์–ด๋‚  ๋•Œ๊นŒ์ง€ ์ž ๋“ค๊ณ  ์‹คํ–‰ ์‹œ๊ฐ„์€ ์‹œ์Šคํ…œ ํƒ€์ด๋จธ์™€ ์Šค์ผ€์ค„๋Ÿฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ํœด๋ฉด ์Šค๋ ˆ๋“œ๋Š” ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ํ˜„์žฌ ํœด๋ฉด ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๊ฒฝ์šฐ InterruptedException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ€๋ฆฌ์ดˆ์— ๋Œ€ํ•œ ์ธ์ˆ˜ ๊ฐ’์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด IllegalArgumentException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

IllegalArgumentException ์„ ๋˜์ง€๋Š” ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

public class SleepDemo1 {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(-5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " ms");
       }
}
๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์Šค๋ ˆ๋“œ "main" java.lang.IllegalArgumentException์˜ ์˜ˆ์™ธ: SleepDemo.main(SleepDemo.java:7)์˜ java.base/java.lang.Thread.sleep(๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ)์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ’์ด ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค.
์œ„์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ž ๋“ค๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์ ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// Java Program to sleep the custom thread
public class SleepDemo2 extends Thread{

       public void run()
       {
           // thread 0
           try {
               for (int i = 0; i < 10; i++) {

                   // sleeps the main thread for about 2 seconds
                   Thread.sleep(2000);
                   System.out.println(i);
               }
           }
           catch (Exception e) {

               // catching the exception
               System.out.println(e);
           }
       }
       public static void main(String[] args)
       {
           SleepDemo2 sleepDemo2 = new SleepDemo2();
           sleepDemo2.start();
       }
}
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
0 1 2 3 4 5 6 7 8 9
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION