29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho Nickname 블스 blogstudy@naver.com
채팅프로그램 프로세스 객체0 객체0 객체1 객체2 29-1. 스레드란? 파일전송 스레드 채팅 스레드 스레드0 스레드0 스레드1 아마도 한 번쯤은 멀티 프로세스라는 말을 들어 본 적이 있을 겁니다. 멀티 프로세스란 컴퓨터가 여러 가지 일을 동시에 하고 있는 것을 뜻합니다. 지금 저의 경우 컴퓨터에서 음악이 나오고, 워드프로그램을 사용하고, 동료한테 무거운 파일을 전송해 주고 있습니다. 이것이 멀티프로세스 입니다. 그럼 스레드(멀티스레드)란 무엇일까요? 위에서 말한 하나의 프로세스에서 다시 여러 가지 일을 하는 것을 뜻 합니다. 예를 들어 파일을 전송하면서 채팅을 하고 있습니다. 동일한 채팅프로그램에서 파일전송과 채팅을 동시에 하고 있는 것 입니다. 파일전송 스레드 채팅프로그램 프로세스 채팅 스레드 JAVA는 기본적으로 멀티스레드를 지원 하고 있습니다. 스레드는 두 가지 형태로 존재 합니다. 하나는 객체 하나를 n개의 스레드가 공유 하는 방식 이고, 또 다른 하나는 객체 하나당 하나의 스레드가 존재하는 방식 입니다. 객체0 스레드0 스레드0 객체0 객체1 스레드1 스레드1 스레드2 스레드2 객체2
29-2. 멀티스레드 문법 Runnable 인터페이스 구현을 통한 Thread (29_2_ex1_thread) Thread 클래스를 상속 통한 Thread (29_2_ex2_thread)
29-2. 멀티스레드 문법 객체1개, 스레드n개 (29_2_ex3_thread)
29-2. 멀티스레드 문법 객체1개, 스레드1개 (29_2_ex4_thread)
29-2. 멀티스레드 문법 선거 개표 방송 예제(29_2_ex5_thread)
객체0 29-3. synchronized 스레드0 스레드1 스레드2 위에서 살펴본 봐와 같이 JAVA 멀티스레에서 하나의 객체에 n개의 스레드가 진행될 경우가 있습니다. 이런 경우 문제가 생길 수 있습니다. 객체에 선언되어 있는 인스턴스변수를 스레드에서 공유 하게 되어, 인스턴스의 값에 영향을 미치게 됩니다. 이런 경우를 대비해서 JAVA에서는 synchronized라는 키워드를 이용합니다. Synchronized는 먼저 수행되는 스레드의 모든 작업이 끝날 때까지 다른 스레드는 기다려야 하는 방식 입니다. 쉽게 식당 예를 들어 보겠습니다. 점심 시간에 식당에 가면 사람이 많아 비어있는 테이블이 없을 수 있습니다. 그런 경우 우리는 식당 문 앞에서 기다리다가 먼저 온 순서대로 빈자리에 앉습니다. 만약 다른 사람이 식사하고 있는 테이블에 같이 앉아서 식사를 한다면, 반찬도 공유되고, 밥도 공유되어 엉망이 되어 버릴 것입니다. 스레드도 마찬가지라고 생각 하시면 됩니다. (29_3_ex1_thread) 스레드0 객체0 스레드1 스레드2