본문 바로가기
Java

JAVA Thread

by titlejjk 2023. 5. 11.

Java의 Thread란 하나의 프로세스 내에서 독립적으로 실행되는 작업 단위를 말한다. 자바에서는 프로세스가 존재하지 않고, 스레드만 존재하는데 이 자바 스레드는 JVM에 의해 스케쥴되는 실행 단위 코드 블록이다.

 

스레드를 사용하는 이유는 여러 가지가 있다. 가장 큰 이유는 멀티태스킹을 구현하기 위해서이다. 멀티태스킹은 하나의 시스템에서 여러 개의 작업을 동시에 처리하는 것을 말한다. 하지만 여러 개의 프로세스를 생성하는 것은 시스템 자원을 많이 소비하게 되므로, 스레드를 이용하여 작업을 분리하고, 동시에 처리할 수 있도록 한다.

 

자바에서 스레드를 구현하는 방법은 두 가지가 있다. 첫 번째는 Thread 클래스를 상속하는 방법이고, 두 번째는 Runnable 인터페이스를 구현하는 방법이다. Thread 클래스를 상속하는 방법은 Thread 클래스의 run() 메소드를 오버라이딩하여 구현하고, Runnable 인터페이스를 구현하는 방법은 run()메소드를 구현하는 것 이다.

 

Thread 예제 👉

public class BeepPrintExample {
    public static void main(String[] args) {
        Runnable beepTask = new BeepTask();
        Thread thread = new Thread(beepTask);
        thread.start();

        for (int i = 0; i < 5; i++) {
            System.out.println("띵");
            try {
                Thread.sleep(500);
            } catch (Exception e) {
            }
        }
    }
}

class BeepTask implements Runnable {
    public void run() {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        for (int i = 0; i < 5; i++) {
            toolkit.beep();
            try {
                Thread.sleep(500);
            } catch (Exception e) {
            }
        }
    }
}

0.5초 주기로 비프(beep)음을 발생시키면서 동시에 프린팅하는 작업이다. Runnable 인터페이스로 구현

 

스레드를 사용할 때 주의점도 존재한다. 스레드는 동기화 문제가 발생할 수 있는데 여러 개의 스레드가 하나의 자원에 접근할 때, 충돌이 발생하여 데이터가 깨질 수 있다. 이러한 문제를 해결하기 위해서는 synchronized 키워드를 이용하여 스레드 간의 동기화를 맞추어 주어야 한다. 하지만 synchronized 키워드를 많이 사용하면 성능에 문제가 생길 수 있으므로, 적절하게 사용해야 한다.

 

또한 자바에서는 스레드 풀을 지원하는데 이 스레드 풀은 스레드의 생성 및 소멸에 따른 오버헤드를 줄일 수 있으며, 스레드의 재사용이 가능해 성능을 향상 시킬 수 있다.

'Java' 카테고리의 다른 글

JAVA Input & Output  (0) 2023.05.11
JAVA Thread와 Runnable 의 차이  (0) 2023.05.11
JAVA Exception  (0) 2023.05.10
JAVA List Set Map  (0) 2023.05.08
JAVA Collection  (0) 2023.05.08

댓글