[java] 클래스와 객체의 스레드(Thread)를 활용한 동시성 처리에 대해 설명해주세요.
자바는 멀티스레딩을 지원하는 언어로, 동시성 처리를 위해 클래스와 객체의 스레드를 사용할 수 있습니다. 이를 통해 여러 작업을 동시에 실행하고 병렬 처리를 할 수 있습니다.
1. 스레드(Thread)
스레드는 프로세스 안에서 실행되는 작업의 단위입니다. 기본적으로 모든 자바 프로그램은 메인 스레드에서 실행됩니다. 하지만 추가적인 스레드를 생성하여 여러 작업을 동시에 수행할 수 있습니다.
2. 클래스와 객체
클래스는 객체를 생성하기 위한 템플릿 역할을 합니다. 자바에서는 클래스를 기반으로 객체를 생성하고, 각 객체는 독립적인 상태와 동작을 가지게 됩니다. 이를 활용하여 여러 객체에 대해 동시에 작업을 수행할 수 있습니다.
3. 동시성 처리
동시성 처리는 여러 작업을 동시에 실행하여 시스템의 성능을 향상시키는 방법입니다. 자바에서는 멀티스레딩을 통해 동시성 처리를 구현할 수 있습니다.
3.1. 객체 스레드 생성 및 실행
객체별로 스레드를 생성하여 작업을 동시에 처리할 수 있습니다. 객체 스레드는 Thread 클래스를 상속받아 run 메서드를 오버라이딩하는 방식으로 정의할 수 있습니다.
class MyThread extends Thread {
public void run() {
// 작업 수행 코드
}
}
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start(); // 스레드 실행
thread2.start();
}
3.2. Runnable 인터페이스 구현
또 다른 방법은 Runnable 인터페이스를 구현하는 클래스를 만들고, Thread 생성자에 해당 클래스의 인스턴스를 전달하는 것입니다.
class MyRunnable implements Runnable {
public void run() {
// 작업 수행 코드
}
}
public static void main(String[] args) {
MyRunnable runnable1 = new MyRunnable();
MyRunnable runnable2 = new MyRunnable();
Thread thread1 = new Thread(runnable1);
Thread thread2 = new Thread(runnable2);
thread1.start();
thread2.start();
}
4. 스레드 간 동기화
여러 스레드가 동일한 객체에 접근하는 경우 동시성 문제가 발생할 수 있습니다. 이를 해결하기 위해 스레드 간의 동기화가 필요합니다. 자바에서는 키워드인 synchronized
를 사용하여 스레드 간의 동기화를 지원합니다.
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
// 사용 예시
Counter counter = new Counter();
// 여러 스레드에서 increment 메서드를 호출하여 count 값을 증가시킴
5. 참고 자료
- Java Thread (Oracle Java Tutorials)
- Java Concurrency (Java API Documentation)