[Java] Thread

이주형·2023년 5월 9일
0

Java

목록 보기
6/10

📌 Thread

동기 : 작업을 순차적으로 처리하는 것을 의미한다.
비동기 : 동시에 여러 작업을 처리하는 것을 의미한다.
동기적인 작업 다수를 비동기적으로 처리하게 된다.
Thread : 자바에서 비동기 처리를 지원하기 위해 제공하는 클래스

한마디로 동시에 여러 개의 작업을 하고 싶을 때 사용하는 개념이다.

오류가 발생할 가능성이 높은 작업의 경우 별도의 쓰래드로 운영하면 안정적으로 운영할 수 있다.

public static void main(String[] args) {
	// Thread 클래스를 상속받은 쓰레드 클래스
	TestClass1 t1 = new TestClass1();
	t1.start();

	// Runnable 인터페이스를 구현한 클래스
	TestClass2 t2 = new TestClass2();
	Thread thread = new Thread(t2);
	thread.start();
}

// Thread를 상속받은 클래스
class TestClass1 extends Thread {
	// 쓰래드를 발생시켜 처리할 메서드
	public void run() {
		try {
			for (int i = 0; i < 100; i++) {
				Thread.sleep(500);
				System.out.println("TestClass1");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

// runnable 인터페이스를 구한한 클래스
class TestClass2 implements Runnable {
	@Override
	public void run() {
		try {
			for (int i = 0; i < 100; i++) {
				Thread.sleep(300);
				System.out.println("TestClass2");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

📌 Thread 우선순위

여러 쓰래드를 가동 시켰을 때 우선적으로 처리될 쓰래드를 지정할 수 있다.(확률이 높아짐)

Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
Thread3 t3 = new Thread3();

// 쓰래드 우선순위 확인 (기본은 5로 설정되어있다.)
int p1 = t1.getPriority();
int p2 = t2.getPriority();
int p3 = t3.getPriority();
        
// 우선순위 설정
// 숫자가 높을수록 확률이 높아진다.
t1.setPriority(10);
t2.setPriority(3);
t3.setPriority(1);

우선 순위가 높다고 해서 반드시 가장 먼저 처리되는 것은 아니고 가장 먼저 처리될 확률이 높아지는 것 뿐이다.

📌 Thread 동기화

동기화를 하게 되면 쓰레드가 접근하는 순서대로 코드를 처리하고 늦게 도착하는 쓰레드는 기다렸다가 먼저 도착한 쓰레드의 작업이 완료가 되면 다음 쓰레드가 작업을 하게 된다.

임계영역 : 여러 개의 쓰레드가 메서드 혹은 특정 코드를 같이 사용하는 것

이 임계영역으로 인해 발생되는 오류를 방지하기 위해서 동기화를 해준다고 보면 된다.

  • 메서드를 동기화 하는 방법
public synchronized void method() {   
      // 임계영역 코드
}

0개의 댓글