[공공데이터 개발과정] 0412 자바

송경근·2023년 5월 14일
0

자바 배우기

목록 보기
18/18
post-thumbnail
스레드와 프로세스의 차이점은 무엇인지
스레드의 동기화는 무엇인지

용어정리

프로세스 : 프로그램이 실행 될 때의 과정
운영체제는 실행 중인 프로그램 관리

멀티 프로세스 : 프로그램 단위의 멀티 태스킹

멀티태스킹 : 두가지 이상의 작업을 동시 수행

스레드 : 코드의 실행 흐름
멀티스레드 : 두개 이상의 코드 흐름
프로그램 내부에서 여러 개의 일을 하는 것.

프로세스 = 프로그램의 실행 과정
스레드 = 프로그램 내부의 실행과정

프로세스 :

운영체제. 실행중인 프로그램 관리
실행중인 프로그램
자신만의 자원을 가지기 때문에 프로세스끼리는 서로 독립적

멀티태스킹 :

대부분의 운영체제가 지원. 시스템 자원을 효율적으로 사용할 수 있음.
다수의 애플리케이션을 병행처리

스레드

하나의 실행 흐름으로 프로세스 내부에 존재
뭔가 동작은 하니까 프로그램의 프로세스가 이루어지는거!
프로세스는 적어도 하나 이상의 스레드를 가지고있다!
프로세스에 비해 실행 환경에 필요한 자원이 매우 적기 때문에 경량 프로세스라고 한다
메모리와 파일 등 모든 자원을 프로세스 자원과 공유

병렬 진행됨.

추가 설명

메인 스레드 : main() 메서드의 첫 코드부터 순차적으로 실행
return을 만나거나 / main의 마지막 코드까지 모두 실행되면 종료

메인 스레드는 추가작업할 스레드들을 만들어서 실행 가능.

작업 스레드 :추가작업할 스레드 > 
멀티 스레드 프로그램 개발 시 먼저 몇 개의 작업을 병렬로 실행할 지 결정 후 
작업별로 스레드 생성

자바 버추얼 머신은 하나의 프로세스로 실행

스레드를 사용하는이유

1. 비동기 처리 :

	a. 여러 작업을 동시에 실행하고,
	b. 한 작업이 끝나지 않아도 다른 작업 수행 가능.
	ex ) 웹 파일 다운로드중에 문서 작업, 동영상, 게임 등 여러 작업 가능

2. cpu를 효율적으로 사용가능 :

	100% 성능의 컴퓨터가 있다!
	동영상 보는데 10프로를 쓴다면 90프로는 다른 작업에 쓸 수 있도록 하는거다
	

Runable 구현

: java.lang 패키지에 있는 tread 클래스를 이용하여 작업 스레드 객체 직접 생성

스레드 생성 방법

스레드 생명 주기

실행 대기 상태 : 실행 기다리고 있는 상태
실행 상태 : cpu 작업 스케줄링에 따라 cpu를 할당하여 run() 메소드를 실행
-> cpu 스케줄링에 따라 대기상태로 전환 가능
-> 다른 스레드가 실행하려고 대기상태로 전환

종료 상태 : 실행 상태에서 run() 메소드가 종료되어
실행할 코드가 없이 스레드를 멈춘 상태

Thread 클래스의 맴버


yield 실행 양보!

스레드 종료

run() 실행종료를 위한 stop() 메서드

스레드를 안전하게 종료하는 법
	반복문의 조건
	interrupt() 메서드
	

스레드 동기화

다중 스레드 프로그래밍 환경에서 임계영역이 있다면 동기화 문제가 발생
	임계영역 
		여러 스레드가 동시에 접근할 수 있는 공유자원을 보호하기 위해
		사용되는 코드 영역
		->동시 접근이 많아지면 기대하지않은 결과 발생 가능성 올라감
		
		스레드는 임계 영역에 들어가기 전에 Lock / 나올 때 Lock 해제(Unlock)
		=> 동기화(데이터의 일관성과 무결성을 보장) 
		Synchronization 키워드 사용 - 해당 객체나 메서드에 대한 동시 접근 제어
		
		1.인스턴스 메서드에 사용
		2.객체에 사용
		3.클레스에 사용
		
기존에 있던 자료를 사용하는 B스레드는 원본을 잃어버린 것
실행이 안될 가능성이 높아짐(오류)
안정성이 떨어짐

대기와 통보

공유자원은 보호가능. 특정 스레드가 필요없이 오래 점유할 가능성 있음
객체의 락과 관련된 wait(),notify(), notifyAll()등 사용
협업할 때 많이 사용됨

자원을 공유하지만 한쪽은 생산하고 한쪽은 소비하는 형태로 작업할 때
두 스레드 사이에 협업이 필요함
profile
개발자가 되려는 학생입니다

0개의 댓글