자바/그림으로 배우는 JAVA

[Lesson 15] 스레드

hooooolly 2024. 8. 29. 01:53

1️⃣ 스레드의 기본

 

메인 메서드부터 시작해서 차례로 실행하는 각각의 처리 흐름을 스레드라고 하는데 여러 개의 스레드를 기동 해서 코드의 여러 부분이 동시에 실행되는 구조를 만들 수 있다. 

여러 개의 스레드를 기동 하면, 오래 걸리는 작업이 끝나기를 기다리지 않고 그 작업이 수행되는 중에 다른 작업을 시작할 수 있어 효율적인 처리가 가능해진다

 

스레드를 늘리기 위해서 java.lang 패키지의 Thread 클래스를 확장하고 run() 메서드를 정의해야 한다.

class Car extends Thread {
	private String name;
    //String name을 받는 생성자
    
    public void run() {
    	System.out.println(name);
    }
}

 

start() 메서드를 호출하면 새로운 스레드를 기동하고 그 스레드는 가장 먼저 run() 메서드를 실행하는 메커니즘에 따라 작동하게 된다. 새로 시작된 스레드는 run() 메서드의 종료와 함께 종료된다. main() 메서드는 별도의 작업을 계속 수행한다.


 

2️⃣ 스레드의 조작

 

sleep() 메서드를 사용하면 괄호 안에 지정된 밀리세컨드 동안 기동 중인 스레드를 일시 정지시킬 수 있다.  main() 메서드 역시 하나의 기본 스레드 단위이기 때문에 sleep 메서드를 사용하여 main 메서드를 조작할 수 있다.

 

join 메서드를 사용하면 다른 스레드가 끝날 때까지 처리를 중지하고 기다렸다가 종료 후 동작한다. 


 

3️⃣ 스레드의 생성 방법

 

자바의 단일 상속 원칙에 의해서 Thread 클래스를 상속받을 수 없는 경우 Runnable 인터페이스를 구현해서 스레드를 만들 수 있다. 이때 Runnable 인터페이스를 구현한 클래스의 객체를 Thread 클래스의 객체로 전달한 다음 start 메서드를 호출해서 스레드를 기동 한다.

 


 

4️⃣ 동기화

 

여러 개의 스레드가 같이 공유하는 단일 필드에 접근할 경우 모순/충돌이 발생할 수 있다. 이 문제를 해결하게 위해 메서드 앞에 synchronized를 붙이면 해당 메서드가 실행되는 동안 다른 스레드는 같은 메서드를 호출할 수 없도록 한다. 

public synchronized void add (int money) {
	
}

 

스레드끼리의 처리 타이밍 제어 메커니즘을 동기화 라고 한다.