Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

끄적끄적

thread와 런에이블 본문

CS 공부

thread와 런에이블

yenacathy97 2022. 3. 20. 01:55

 

thread: 한 프로세스 안에서 동작하는 실행 단위

Thread의 생성

1. Thread 클래스로부터 직접 생성

- Runnable 인터페이스를 implements 클래스 객체를 사용. Runnable 인터페이스는 run메서드를 무조건 구현해야함

 

public static void main(String args[]){
	Runnable task = () =>{
	int sum=0;
	for(int i=0;i<10;i++){
		sum+=i;
	}
	}
	Thread subTread1 = new Thread(task);
	Thread subThread2 = new Thread(task);
	subThread1.start();
	subThread2.start();
}

2. Thread 하위 클래스로부터 생성

- Thread 클래스를 상속받아 run 메서드를 오버라이딩

public class CustomThread extends Thread{

	@Override
    public void run(){
    	int sum=0;
        for(int i=0;i<10;i++){
        	sum+=i;
        }
    }
}

public static void main(String args[]){
	Thread subThread1 = new CustomThread();
    subThread1.start();

}

- 자바에서는 다중 상속이 불가능하므로 Thread 클래스의 run 메소드 떄문에 상속으로 하는 것은 비효율적. 단순히 run()메서드만 필요한 경우는 Runnable 상속,  Thread 기능 확장이 필요한 경우 Thread 클래스를 상속하면 된다.

- 참조) https://recipes4dev.tistory.com/143?category=768056)

 

멀티 스레드

프로세스와 멀티스레드 비교

멀티스레드의 경우 Heap, Code, Static 영역을 공유하지만 스레드 별로 각기 다른 Stack영역이 존재. 각 스레드가 자신이 속한 프로세스의 메모리를 공유하여 자원의 낭비가 적다.

 

멀티스레드의 병렬 처리

컴퓨터가 동시 작업할 수 있는 최대 작업의 수는 CPU core수와 같다. CPU 코어보다 많은 스레드가 실행되면 문맥교환이 발생한다. -> 스케줄링 기법 필요

 

동기화(Synchronized)

- 스레드들이 동일한 자원에 접근할때  -> 동기화 /lock

- 어떤 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 하는 작업

- 간섭하지 못하게 하는 영역을 임계영역(critical section)으로 설정 => synchronized 키워드 사용

- synchronized 키워드가 붙은 메서드가 호출된 시점부터 해당 메서드가 포함된 객체의 lock을 얻어 작업하다가 메서드가 종료되면 lock을 반환한다.

lock

- 해당 객체의 lock을 가지고 있는 스레드만 임계 영역의 코드를 수행할 수 있다. 한 객체당 lock은 하나밖에 없어 다른 스레드들은 lock을 얻을 때까지 기다리게 된다.

 

교착상태(DeadLock)

- 서로의 lock이 풀리기 기다리며 무한한 대기 상태에 빠지게 되는 것

- 발생 조건

1. 상호 배제 - 한자원에 대해 여러 스레드 동시 접근 불가

2. 점유 대기 - 최소 하나의 자원을 점유하면서 다른 스레드 자원 반납을 기다림

3. 비선점 - 다른 스레드의 자원을 중간에 가져올 수 없음

4. 순환 대기 - 각 스레드가 순차적으로 다음 스레드가 요구하는 자원을 가지고 있음

 

 

참고)

https://math-coding.tistory.com/175?category=920734

https://honbabzone.com/java/java-thread/

'CS 공부' 카테고리의 다른 글

람다식 (2)  (0) 2022.03.26
[java]람다식(Lambda Expression)  (0) 2022.03.20
[java] static  (0) 2022.03.18
[java] 배열 리스트의 동적 동작  (0) 2022.03.17
[java]String 생성과 메모리  (0) 2022.03.17
Comments