쓰레드 Thread

김예지·2023년 1월 12일
0

프로세스(실행 중인 프로그램)의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이고 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스 라고 한다
프로세스를 하나 더 만드는 것보다 쓰레드를 하나더 생성하는 것이 적은 비용이 든다

멀티 쓰레드의 장점

  • CPU의 사용률을 향상시킨다
  • 자율을 보다 효울적으로 사용할 수 있다
  • 사용자에 대한 응답성이 향상된다
  • 작업이 분리되어 코드가 간결해진다

쓰레드 구현 방법 2가지

class MyThread extends Thread{
	public void run(){} // Thread클래스의 run()을 오버라이딩
}
class MyThread2 implements Runnable{
	public void run(){} // Runnable인터페이스의 run()을 구현
}

MyThread th1 = new MyThread(); // 클래스를 상속받은 쓰레드 생성
Runnable run = new MyThread2();
Thread th2 = new Thread(run); // 인터페이스를 상속받은 쓰레드 생성

쓰레드를 실행 시킬 땐 start()메소드를 사용해주면 된다 run()메소드를 호출 할 시에는 일반 메소드 호출과 같다

start()메소드 실행 순서
1. main메소드에서 쓰레드의 start() 호출
2. start()는 새로운 쓰레드를 생성하고, 끄레드가 작업하는데 사용될 호출스택을 생성한다
3. 새로 생성된 호출스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행한다
4. 이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행된다

쓰레드의 실행상태

NEW 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태
RUNNABLE 실행 중 또는 실행 가능한 상태
BLICKED 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)
WAITING TIMED_WAITING 쓰레드의 작어비 종료되지는 않았지만 실행가능하지 않은(unrunable) 일시정지상태 TIMED_WAITING은 일시정지시간이 지정된 경우를 의미
TERMINATED 쓰레드의 작업이 종료된 상태

쓰레드의 동기화

한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것

public synchronized void calcSun(){
 // 임계영역
}
public void calcSun(){
	synchronized(객체의 참조변수){
    	// 임계영역
    }
}
profile
나만의 방식을 찾아가는 신입신입 개발자

0개의 댓글