23.11.28 - java (day07)

임연진·2023년 11월 29일

11월 28일 - java day07

오늘 할 것 :

파일 전송 서버
파일 전송 클라이언트

스레드 개념
소켓 통신에 스레드 적용
여러 클래스를 동시에 실행한다~

레이스 컨디션
싱클톤 - 멀티 스레드

멀티 스레드가 쓰이는 곳


하드 디스크에 저장된 프로그램

메모리에서 실행된 프로그램 : 프로세스

프로세스 1개에는 기본적으로 스레드가 1개 있음

쓰레드를 구현하는 방법 2가지
Thread 클래스를 상속받는 방법
Runnable 인터페이스를 구현하는 방법

스레드 : 코드를 순차적으로 실행하는 일꾼
여러 스레드를 이용해서 동시에 여러작업을 수행
장점: 작업 속도가 빨라짐. 비동기 작업 가능(ex.네이버메인에서 연관검색어 바뀌는동안 나는 검색가능)
단점: 컨텍스트 스위치가 많이일어나면(스레드를 왔다갔다 많이하면) 오히려 작업 속도가 느려질수도 있음.
동기화가 어려워짐.
스레드가 세이프하지 않을 수 있음(차례대로 작업한것과 스레드를 동시에 작업했을때 결과가 같지 않을 수 있다)

Runnable 인터페이스 구현체

balance 읽어서 값을 더하고 저장, 여러 스레드가 동시에 작업하면 레이스 컨디션 상태가 됨-> 실행 결과가 스레드 세이프하지 않음

레이스 컨디션 상태: 마치 경주하듯이 스레드를 동시에 작업하는데 결과가 스레드세이프하지 않을 때
  • 동기화 할 때는 Synchronized 사용!

Synchronized를 사용하면 여러 스레드가 동기화하면서 작업을 진행
(한 스레드가 값을 읽는동안 값에 락을 걸어서 다른스레드가 동시에 읽지 못하게함. 오히려 성능이 더안좋아질수도있음)
Synchronized : 락을 걸고 푸는 것. 2가지방식있음
지시어방식
블록방식


basic2/day07/MultiThreadServer.java
basic2/day07/MessageProcessThread.java
basic3/day07/MultiThreadClient.java

		서버

	메시지		메시지

클래스		클래스		클래스

서버가 메시지를 수신할 수 있는 스레드
서버 메시지 송신 스레드

서버 클래스(MultiThreadServer)
포트번호
서버 소켓
입출력 스트림
클라이언트 소켓들을 저장할 수 있는 변수(List로 하든 배열로하든 맘대루->List로 함)
메인
서버 실행
무한 반복
클라이언트 접속 허용 -> 클라이언트 소켓 생성
변수에 클라이언트 소켓 추가

		클라이언트 메시지 처리 스레드 생성
			소켓
			생성자(소켓)
			run 메소드 구현
				무한반복
					메시지 받아서 출력
		스레드 실행

메시지 송신 스레드
메시지를 받는 코드를 무한 반복
메시지 수신 스레드
메시지를 보내는 코드를 무한 반복

클라이언트 클래스
메인
서버 주소
서버 포트 번호

	소켓


	메시지 송신 스레드 생성
	메시지 수신 스레드 실행

	메시지 송신 스레드 생성
	메시지 수신 스레드 실행

	무한 반복

메시지 클래스
메시지 타입
메시지
현재 시간

0개의 댓글