Thread

suzi_911·2021년 8월 18일
0

thread란?

  • process 실행 중인 프로그램이 싱행디되면 os로부터 메모리를 할당받아 프로세스 상태가 됨
  • thread하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread임

멀티스레드

  • 여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과
  • thread는 각각 자신만의 작업 공간을 가짐 - context라고 함
  • 각 thread사이에서 공유하는 자원이 있을수 있음 (자바에서는 static instance)
  • 여러개의 thread가 동시에 공유하는 자원을 sharedResource라고 한다.

문제점

  • 여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수 있음
  • 이렇게 여러 thread가 공유하는 자원중 경쟁이 발생하는 부분을 critical section이라고 함
  • critical section에 대한 동기화를 구현하지 않으면 오류가 발생할 수 있음(공유자원은 보호)

사용 예시1)

결과
Thread[main,5,main]start
Thread[main,5,main]end
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	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	32	33	34	35	36	37	38	39	40	41	42	43	31	32	33	34	35	36	37	38	39	40	44	45	46	47	48	49	50	51	52	53	54	55	56	57	58	59	60	61	62	63	64	65	...200

사용예시2)
다른 클래스를 extends했을 경우

결과
Thread[main,5,main]start //[스레드를 호출한 함수, 우선순위,스레드가 속한 함수]
Thread[main,5,main]end
run
1	2	3	4	5	6	7	8	9	10	11	1	12	2	13	3	...200

start는 thread의 메서드이기 때문에 Thread 생성자로 한번 더 감싸준다.

thread 상태

  • start가 되면 runnable상태
  • Runnable은 cpu를 배분받으면 언제든지 수행이 될수 있는 상태
  • thread가 종료되면 dead상태
  • not Runable의 상태는 cpu를 점유할수 없는상태

출처: https://gitlab.com/easyspubjava/javacoursework/-/tree/master/

0개의 댓글