[java] 자바에서 사용하는 쓰레드 알고리즘
자바에서는 멀티쓰레딩을 지원하여 동시에 여러 작업을 처리할 수 있습니다. 멀티쓰레딩을 구현하기 위해서는 Thread 클래스 또는 Runnable 인터페이스를 사용하는 것이 일반적입니다.
1. Thread 클래스
자바에서는 Thread 클래스를 상속받아 run() 메서드를 오버라이딩하는 방식으로 쓰레드를 구현할 수 있습니다. 아래는 간단한 예제 코드입니다.
public class MyThread extends Thread {
public void run() {
System.out.println("쓰레드 실행");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
2. Runnable 인터페이스
또 다른 방법으로는 Runnable 인터페이스를 구현하는 것입니다. 다음은 Runnable을 사용한 예제 코드입니다.
public class MyRunnable implements Runnable {
public void run() {
System.out.println("쓰레드 실행");
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
3. 동기화(Synchronization)
여러 쓰레드가 공유 자원을 동시에 수정하려고 하면 문제가 발생할 수 있습니다. 이를 해결하기 위해 자바에서는 synchronized 키워드를 제공합니다.
public class MySynchronizedMethod {
private int count = 0;
public synchronized void increment() {
count++;
}
}
4. 락(Lock)
Lock 인터페이스는 synchronized 키워드와 유사한 기능을 제공하지만 조금 더 세밀한 제어가 가능합니다.
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyLockExample {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}
자바에서는 이러한 다양한 쓰레드 알고리즘을 활용하여 효율적인 멀티쓰레딩을 구현할 수 있습니다.
참고문헌:
- Oracle Java Documentation: https://docs.oracle.com/javase/8/docs/api/
- Baeldung: https://www.baeldung.com/java-locks