ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Thread] Threadλ₯Ό μƒμ„±ν•˜λŠ” 방법 - Runnable μΈν„°νŽ˜μ΄μŠ€μ™€ Thread 클래슀의 차이
    개발/Java 2022. 4. 13. 17:15

     

    μ•ˆλ…•ν•˜μ„Έμš”πŸΏοΈ

    μ˜€λŠ˜μ€ μ“°λ ˆλ“œμ— λŒ€ν•œ 기본적인 이야기λ₯Ό λ‚˜λˆ λ³ΌκΉŒ ν•©λ‹ˆλ‹€.

     

    μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 것은 크게 두가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

    ν•˜λ‚˜λŠ” Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것이고, λ‹€λ₯Έ ν•˜λ‚˜λŠ”  Thread 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

     

    사싀 Thread ν΄λž˜μŠ€λŠ” Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ΄λ―€λ‘œ, μ–΄λ–€ 것을 μ μš©ν•˜λŠλƒμ˜ 차이만 μžˆμŠ΅λ‹ˆλ‹€.

    그리고 λ‘˜λ‹€ java.lang νŒ¨ν‚€μ§€μ— μžˆμ–΄μ„œ, μ‚¬μš©ν•  λ•Œμ— λ³„λ„λ‘œ importλŠ” ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

     

    Runnable μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλ˜μ–΄ μžˆλŠ” λ©”μ†Œλ“œλŠ” 단지 ν•˜λ‚˜ μΈλ°μš”, 그것은 void νƒ€μž…μ˜ run() λ©”μ†Œλ“œ μž…λ‹ˆλ‹€. 이것은 μ“°λ ˆλ“œκ°€ μ‹œμž‘λ˜λ©΄ μˆ˜ν–‰λ˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€. 

     

    λ°˜λ©΄μ—, Thread ν΄λž˜μŠ€λŠ” 맀우 λ§Žμ€ μƒμ„±μžμ™€ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. (이 뢀뢄은 λ‚˜μ€‘μ— λ”°λ‘œ 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.)

     

    였늘의 μ£Όμ œλŠ” 이 두가지 μ‚¬μš©λ²•μ— λŒ€ν•œ 차이λ₯Ό λ‹€λ£¨λŠ” κ²ƒμ΄λ‹ˆ 이것을 λ¨Όμ € 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

    그럼 μ•„λž˜ μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ 확인해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

     

     

    λ‘˜μ€ 무엇이 λ‹€λ₯ΌκΉŒ?


    RunnableSample.java (Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 경우)

    package e.thread;
    
    public class RunnableSample implements Runnable{
        @Override
        public void run() {
            System.out.println("This is RunnableSample's run() method.");
        }
    }

     

    ThreadSample.java (Thread 클래슀λ₯Ό ν™•μž₯ν•œ 경우)

    package e.thread;
    
    public class ThreadSample extends Thread{
        public void run() {
            System.out.println("This is ThreadSample's run() method.");
        }
    }

     

    RunThreads.java 

    package e.thread;
    
    public class RunThreads {
        public static void main(String[] args) {
            RunThreads threads = new RunThreads();
            threads.runBasic();
        }
    
        public void runBasic() {
            //Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ RunnableSample 클래슀λ₯Ό μ“°λ ˆλ“œλ‘œ λ°”λ‘œ μ‹œμž‘ν•  μˆ˜λŠ” μ—†λ‹€.
            //λ”°λΌμ„œ, 이와 같이 Thread 클래슀의 μƒμ„±μžμ— ν•΄λ‹Ή 객체λ₯Ό μΆ”κ°€ν•˜μ—¬ μ‹œμž‘ν•΄μ£Όμ–΄μ•Όλ§Œ ν•œλ‹€.
            RunnableSample runnable = new RunnableSample();
            new Thread(runnable).start();
    
            //Thread 클래슀λ₯Ό 상속받은 ThreadSample ν΄λž˜μŠ€λŠ” 객체에 λ°”λ‘œ start() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ˜€λ‹€.
            ThreadSample thread = new ThreadSample();
            thread.start();
            System.out.println("RunThreads.runBasic() method is ended.");
        }
    }

     

    μœ„μ—μ„œ 가독성을 μœ„ν•΄ μ½”λ“œμ— μ£Όμ„μœΌλ‘œ μ„€λͺ…을 μ¨λ†“μ•˜μŠ΅λ‹ˆλ‹€. 

     

    λ¨Όμ € run()μ΄λΌλŠ” λ©”μ†Œλ“œλŠ” μ“°λ ˆλ“œκ°€ μˆ˜ν–‰λ˜λŠ” μš°λ¦¬κ°€ κ΅¬ν˜„ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό λ§ν•˜κ³ , start()λΌλŠ” λ©”μ†Œλ“œλŠ” μ“°λ ˆλ“œλ₯Ό μ‹œμž‘ν•˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€. 기본적으둜 Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜, Thread 클래슀λ₯Ό ν™•μž₯ν•  λ•Œμ—λŠ” run() λ©”μ†Œλ“œλ₯Ό μ‹œμž‘μ μœΌλ‘œ μž‘μ„±ν•΄μ•Όλ§Œ ν•˜λŠ”λ°μš”, ν•˜μ§€λ§Œ μ“°λ ˆλ“œλ₯Ό μ‹œμž‘ν•˜λŠ” λ©”μ„œλ“œλŠ” run()이 μ•„λ‹Œ start()λ©”μ†Œλ“œμž…λ‹ˆλ‹€. μš°λ¦¬κ°€ start() λ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ§€ μ•Šμ•„λ„, μ•Œμ•„μ„œ μžλ°”μ—μ„œ run() λ©”μ†Œλ“œλ₯Ό μˆ˜ν–‰ν•˜λ„λ‘ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 

     

    λ‹€μ‹œ 본둠으둜 λŒμ•„κ°€μ„œ, μœ„μ˜ μ½”λ“œμ—μ„œμ²˜λŸΌ Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ κ²½μš°μ—λŠ” λ°˜λ“œμ‹œ Thread 클래슀의 μƒμ„±μžμ— ν•΄λ‹Ή 객체λ₯Ό μΆ”κ°€ν•˜μ—¬ μ‹œμž‘ν•΄μ£Όμ–΄μ•Όλ§Œν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, Thread 클래슀λ₯Ό ν™•μž₯ν•œ 경우, 객체λ₯Ό μƒμ„±ν•΄μ„œ λ°”λ‘œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‹œμž‘ν•©λ‹ˆλ‹€.

     

     

    κ·Έλ ‡λ‹€λ©΄ μ™œ μ΄λ ‡κ²Œ 두가지 방법을 μ œκ³΅ν• κΉŒ?


    λ§Œμ•½ μ–΄λ–€ ν΄λž˜μŠ€κ°€ μ–΄λ–€ λ‹€λ₯Έ 클래슀λ₯Ό extendsλ₯Ό μ‚¬μš©ν•΄μ„œ ν™•μž₯ν•΄μ•Ό ν•˜λŠ” 상황인데, 이것을 μ“°λ ˆλ“œλ‘œ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•΄λ΄…μ‹œλ‹€. κ²Œλ‹€κ°€ κ·Έ λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ Threadλ₯Ό ν™•μž₯ν•˜μ§€ μ•Šμ€ 경우라면, 닀쀑 상속이 λΆˆκ°€λŠ₯ν•œ μžλ°”μ—μ„œ μ–΄λ–»κ²Œ 이것을 ν•΄μ•Όν• κΉŒμš”? 

     

    λ”°λΌμ„œ, μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

     

    μ •λ¦¬ν•˜μžλ©΄, μ“°λ ˆλ“œ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό ν™•μž₯ν•  ν•„μš”κ°€ μžˆμ„ κ²½μš°μ—λŠ” Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©΄ 되고, 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” μ“°λ ˆλ“œ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 νŽΈν•˜κ² μŠ΅λ‹ˆλ‹€.

     

     

    κ°μ‚¬ν•©λ‹ˆλ‹€ :)

     

     

    λŒ“κΈ€

Designed by Tistory.