관리 메뉴

Frog is cry

Day17 본문

JAVA/개념정리

Day17

Frog is cry 2020. 7. 20. 18:41
쓰레드(Thread)
	프로그램
		소스코드로 잘 짜여진 틀(실행되지 않은 상태)

	프로세스
		실행된 프로그램
		운영체제로부터 시스템 자원을 할당받는 작업의 단위
		운영체제 대신 JVM에 의해 실행된다.
	쓰레드
		프로세스의 특정한 수행 경로.
		프로그램 처리 경로.
	
		- 단일 쓰레드
			직렬적이다.
			가장 마지막에 있는 작업이 가장 나중에 수행된다.
			따라서 상대적으로 먼저 수행되어야 할 필요가 있는 작업이
			나중에 수행되면 비효율적이지만, 정확한 시작과 끝이
			있기 때문에 상대적으로 오류가 발생될 확률이 적다.
		
		- 멀티 쓰레드
			병렬적이다.
			하나의 프로세스를 동시에 처리하는 것 처럼 보이지만
			사실은 매우 짧은 단위로 분할해서 차례로 처리한다.
			여러개의 처리경로를 가질 수 있게 한다.
			한 개의 처리경로를 여러개로 나누어 동시 작업이 가능.
			웹 서버가 대표적인 멀티 쓰레드 응용프로그램이다.
			JVM에 스케줄링 신청을 하고 등록이 되어야지만
			멀티 쓰레드 구현이 가능하다.
			
		- 멀티 쓰레드의 장단점
			1. 장점
				효율성 증가
				처리량 증가
				처리비용 감소
			2. 단점
				복잡하고 설계가 어렵다.
				자원의 공유 문제(동기화)
				하나의 쓰레드 문제 발생시 모두 문제 발생
				교착상태(DeadLock)

교착 상태(DeadLock)
	멀티 쓰레드 중 쓰레드 간에 대기 상태가 종료되지 않아서
	무한정 대기만 하는 비정상적인 상태

	교착상태라고 판단했을 때에는 하나의 쓰레드를 없애주거나 모든 쓰레드를
	깨워준다. 하지만 교착상태인지를 판단하는 것이 어렵기 때문에 교착상태를
	대비할 수 있도록 설계하는 것이 복잡하고 어렵다.
---------------------------------------------------------------------------------
멀티 쓰레드 구현 방법
	Thread 상속
	Runnable 지정

	***run()메소드가 바로 멀티 쓰레드의 핵심이다!
-----------------------------------------------------------
join()
	먼저 처리할 쓰레드 종료 전 다음 로직 수행시 치명적인 오류가 발생할 수 있다.
	그러므로 먼저 처리할 쓰레드 객체에 join()을 사용하면 다른 쓰레드는
	먼저 할 쓰레드가 종료할 때 까지 대기상태에 돌입한다.
-----------------------------------------------------------
동기화(Synchronized)
	특정 자원에 여러 개의 쓰레드가 접근 하게 되면 자원 공유의 문제가
	발생할 수 있다. 이를 막아주기 위해서 동기화를 사용하면 해당 자원은
	반드시 쓰레드 한 개씩만 접근 할 수 있게 된다.
	이 뿐만 아니라 각 쓰레드별 제어를 하기 위해서도 사용한다.

'JAVA > 개념정리' 카테고리의 다른 글

메소드  (0) 2020.07.20
Day18  (0) 2020.07.20
Day16  (0) 2020.07.20
Day15  (0) 2020.07.20
Day14  (0) 2020.07.20
Comments