본문 바로가기
728x90
반응형
코딩에 대해 아예 처음 입문하시는 분들이라면 
아래 링크의 1탄부터 보고 오시는 걸 추천드립니다.

2023.08.06 - [코딩/JAVA] - Spring 공부하기 전 알아야하는 JAVA 기초 개념 (1탄)

 

Spring 공부하기 전 알아야하는 JAVA 기초 개념 (1탄)

처음 1탄은 완전 JAVA의 기초를 다루기에 다른 언어를 학습해보셨던 분들은 2탄부터 보시는 걸 추천드립니다 :) 변수와 데이터 타입 변수는 데이터를 저장하는 메모리 공간을 가리키며, 데이터 타

quddkflty.tistory.com

 

스레드에 정의된 주요 메서드

  • start(): 새로운 스레드를 생성하고 run() 메서드를 실행시킨다.
  • run(): 스레드가 실행할 작업을 정의하는 메서드로, start() 메서드에 의해 호출된다.
  • sleep(long millis): 현재 실행 중인 스레드를 주어진 시간만큼 일시 정지시킬 수 있다. 지정된 시간(밀리초) 동안 스레드가 일시 정지된 후 다시 실행되는데, 이때 InterruptedException이 발생할 수 있으므로 예외 처리를 해야 한다.
  • join(): 현재 실행 중인 스레드가 다른 스레드가 작업을 완료할 때까지 대기하도록 한다. 즉, 다른 스레드가 작업을 완료할 때까지 기다리는 메서드이다. 이때 InterruptedException이 발생할 수 있으므로 예외 처리를 해야 힌다.
  • interrupt(): 다른 스레드를 인터럽트하여 일시 정지 상태에서 벗어나게 한. sleep() 또는 join() 메서드에 의해 일시 정지된 스레드를 깨우는 역할을 한다.
  • isAlive(): 스레드가 실행 중인지 여부를 반환하며, 실행 중인 경우 true, 그렇지 않은 경우 false를 반환합니다.
  • yield(): 현재 실행 중인 스레드가 다른 스레드에게 실행을 양보하고 실행 대기 상태로 전환된다. CPU 스케줄링에 따라 다시 실행될 수도 있고 그렇지 않을 수도 있다.

 

 

멀티스레드 프로그래밍의 개념과 스레드의 생성 및 실행

 

스레드는 프로세스 내에서 실행되는 작은 실행 단위로, 멀티스레드 프로그래밍은 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 방식을 의미한다. 이를 통해 멀티스레드를 활용하여 여러 작업을 동시에 처리하여 시스템 자원을 효율적으로 활용하고, 병렬 처리로 인한 성능 향상을 기대할 수 있다.

// 스레드 생성과 실행 예시
public class ThreadExample extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - " + i);
            try {
                Thread.sleep(1000); // 1초간 멈춤
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        ThreadExample thread1 = new ThreadExample();
        ThreadExample thread2 = new ThreadExample();
         // ThreadExample 클래스의 객체 thread1과 thread2 생성

        thread1.start(); // 스레드 시작
        thread2.start(); // 스레드 시작
    }
}

 

  • Thread 클래스를 상속받아 스레드를 생성하고 실행하고 있다. run() 메서드 내에서 스레드가 실행할 작업을 정의한 후, start() 메서드를 호출하여 스레드를 실행시킬 수 있습니다.

동기화와 스레드 간의 동기화 처리

멀티스레드 프로그래밍에서는 여러 스레드가 공유 데이터를 동시에 접근하면서 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 동기화를 사용하는데, 동기화를 통해 여러 스레드 간에 공유된 데이터를 안전하게 접근할 수 있도록 설정할 수 있다.

// 동기화 처리 예시
public class SynchronizedExample {
    private int count = 0;

    // 동기화 처리된 메서드
    public synchronized void increment() {
        count++;
    }

    public static void main(String[] args) throws InterruptedException {
        SynchronizedExample example = new SynchronizedExample();

        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                example.increment();
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                example.increment();
            }
        });

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

        thread1.join();
        thread2.join();

        System.out.println("Count: " + example.count); // 결과는 20000이 출력되어야 합니다.
    }
}
  • 동기화를 통해 여러 스레드가 increment() 메서드를 안전하게 실행할 수 있도록 한다. synchronized 키워드를 사용하여 메서드에 동기화 처리를 추가하고 있다.
728x90
반응형