λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Java/Java 이둠

Java둜 닀쀑 μŠ€λ ˆλ“œ λ§Œλ“€κΈ°

닀쀑 μŠ€λ ˆλ“œ λ§Œλ“€κΈ°

볡수의 μŠ€λ ˆλ“œκ°€ μ‹€ν–‰λ˜λŠ” 상황을 μžλ°”λ‘œ λ§Œλ“€μ–΄λ³΄μž.

Thread Class

extends Thread

ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€λ €λ©΄ Thread 클래슀λ₯Ό extends ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

run()

μŠ€λ ˆλ“œμ˜ μ‹€ν–‰ λ‚΄μš©μ€ run() λ©”μ„œλ“œ μ•ˆμ— λ“€μ–΄κ°€μ•Ό ν•œλ‹€.

thread.start()

ν΄λΌμ΄μ–ΈνŠΈ 객체가 thread 클래슀의 start() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰λœλ‹€.

예제

Light 객체

Light 객체가 μžˆλ‹€κ³  κ°€μ •ν•œλ‹€.

Light κ°μ²΄λŠ” ONκ³Ό OFF 두 가지 μƒνƒœ 쀑 ν•˜λ‚˜μ΄κ³ , 졜초둜 μƒμ„±λœ LightλŠ” OFF μƒνƒœλΌκ³  ν•˜μž.

ON μƒνƒœμ—μ„œ on_button_pushed()λ₯Ό μ‹€ν–‰ν•˜λ©΄ "λ°˜μ‘ μ—†μŒ"이 μ½˜μ†” 창에 좜λ ₯되고, OFF μƒνƒœμ—μ„œ on_button_pushed()λ₯Ό μ‹€ν–‰ν•˜λ©΄ "Light On!" 이 μ‹€ν–‰λœλ‹€κ³  ν•˜μž.

Thread1.java

class Thread1 extends Thread{

    private Light light;

    public void setLight(Light light) {
        this.light = light;
    }

    public void run() {
        try{
            Thread.sleep(4000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println("thread 1");
        light.on_button_pushed();
        System.out.println();
    }
}

μ‹€ν–‰ ν›„ Thread.sleep(4000)에 μ˜ν•΄ 4초 λŒ€κΈ° ν›„ light 객체의 on_button_pushed()λ₯Ό μ‹€ν–‰ν•œλ‹€.

Thread2.java

class Thread2 extends Thread{

    private Light light;

    public void setLight(Light light) {
        this.light = light;
    }

    public void run() {
        try{
            Thread.sleep(1000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println("thread 2");
        light.on_button_pushed();
        System.out.println();
    }
}

μ‹€ν–‰ ν›„ Thread.sleep(1000)에 μ˜ν•΄ 1초 λŒ€κΈ° ν›„ light 객체의 on_button_pushed()λ₯Ό μ‹€ν–‰ν•œλ‹€.

Client

public class Main{
    public static void main(String[] args) {
        Light light = new Light();
        Thread1 thread1 = new Thread1();
        thread1.setLight(light);
        Thread2 thread2 = new Thread2();
        thread2.setLight(light);

        thread1.start();
        thread2.start();
    }
}

thread1,2κ°€ light 객체λ₯Ό κ³΅μœ ν•œλ‹€.

좜λ ₯

thread 2

Light On!



thread 1

λ°˜μ‘ μ—†μŒ

thread2κ°€ 1초 λŒ€κΈ°λ‘œ λ¨Όμ € μ‹€ν–‰λ˜λ―€λ‘œ κ³΅μœ ν•˜λŠ” lightλ₯Ό ON μƒνƒœλ‘œ λ³€κ²½ν•œλ‹€.

thread1 μž…μž₯에선 lightκ°€ 이미 ON이기 λ•Œλ¬Έμ— "λ°˜μ‘ μ—†μŒ"이 좜λ ₯λœλ‹€.

μš°μ„ μˆœμœ„

thread κ°„μ˜ μš°μ„ μˆœμœ„λ₯Ό setPriority λ©”μ„œλ“œλ‘œ μ •ν•  수 μžˆλ‹€.

μˆ«μžκ°€ λ†’μ•„μ§ˆμˆ˜λ‘ μš°μ„ μˆœμœ„κ°€ 컀진닀.


        thread.setPriority(1);
        thread.setPriority(10);
        thread.setPriority(Thread.MAX_PRIORITY); // = 10
        thread.setPriority(Thread.NORM_PRIORITY); // = 5
        thread.setPriority(Thread.MIN_PRIORITY); // = 1

'Java > Java 이둠' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μŠ€ν…Œμ΄νŠΈ νŒ¨ν„΄  (0) 2022.03.14
UML Symbol(클래슀 κ°„μ˜ 관계)  (0) 2022.03.13
μžλ°”λΉˆ κ·œμ•½  (0) 2022.03.12
OCP와 DIP  (0) 2022.03.12
Java둜 GUI νšŒμ›κ΄€λ¦¬ λ§Œλ“€κΈ°(Swing)  (0) 2022.03.11