재훈재훈
쓰레드 본문
JAVA thread
프로세스?
프로그램을 실행하면 os로부터 메모리를 할당 받아 프로세스가 됨 - 실행 중인 프로그램!
프로그램 실행에 필요한 데이터, 메모리 등의 자원, 그리고 스레드로 구성되어 있다.
스레드?
프로세스의 자원을 할당 받아 실제로 작업을 수행함
ex. 멀티 프로세스 그리고 멀티 쓰레드
멀티 프로세스 - 컴퓨터에서 유튜브로 영상도 보고 카톡도 하면서 워드프로그램 사용
멀티 쓰레드 - 카카오톡에서 채팅도 하면서 동시에 파일도 전송하는 것
쓰레드를 구현하는 방법은 크게 2가지이다.
1. Runnable 인터페이스를 구현한 쓰레드
public interface Runnable { // Runnable 인터페이스
public abstract void run(); // 쓰레드로 작업하고자 하는 내용을 run 구현을 통해 작성해야 함
}
class RunnableThread implements Runnable {
public void run() { ......... }
}
-------------------------------------------------------------------------------------------------------------
//Runnable을 구현한 경우 인스턴스 생성 방법
RunnableThread rt1 = new RunnableThread(); // Runnable 인터페이스 구현한 클래스 인스턴스 생성
// Runnable rt1 = new RunnableThread(); Runnable 인터페이스형 타입(다형성) - 윗줄과 똑같음
Thread thread1 = new Thread(rt1);
thread1.start(); // 쓰레드의 실행
Thread thread2 = new Thread(new RunnableThread()); // 이렇게 한줄로도 사용 가능
thread2.start();
Runnable 인터페이스 구현 방법은 재사용성이 높고 코드의 일관성 유지가 가능하여 비교적 객체지향적이다.
2. Thread 클래스를 상속한 쓰레드
class ExtendedThread extends Thread {
public void run() { ......... } // Thread 클래스의 run()을 오버라이딩
}
ExtendedThread thread3 = new ExtendedThread(); //Thread 클래스를 상속받은 경우 인스턴스 생성 방법
thread3.start();
한편, 멀티쓰레드는 두 가지 형태가 있다. 첫번째는 1개의 객체를 n개의 쓰레드가 공유하는 방식, 두번째는 1개 객체 당 1개의 쓰레드가 존재하는 방식이다.
1개의 객체를 n개의 쓰레드가 공유하는 방식
- 객체는 1개만 존재하므로 쓰레드들 의 처리 과정 중 객체 내 데이터가 공유된다. - 동기화 필요!
객체 1개 당 스레드 1개
- 각자의 객체가 있으니 데이터가 엉킬 위험이 없음.
synchronized를 이용한 동기화
하나의 객체에 대하여 n개의 쓰레드가 진행될 경우 객체 내에 선언되어 있는 인스턴스 변수를 쓰레드들이 공유하게 되는데 이 과정에서 문제가 발생한다. 이 문제를 막기 위해서는 한 쓰레드가 진행 중인 작업에 대해서 다른 쓰레드가 건드릴 수 없게 하는 것이 필요하다. 이것을 동기화라고 한다. 동기화에는 여러가지 방법이 있다.
synchronized 키워드를 이용해서 동기화를 할 수 있는데 synchronizeds는 먼저 수행되는 스레드의 모든 작업이 끝날 때까지 다른 스레드는 기다려야 하는 방식이다.
소스 출처 - 서울 위즈 김명호 강사, 실전 Java 강의
'Computer Engineering > JAVA' 카테고리의 다른 글
(OODP) Adapter Pattern (0) | 2018.04.19 |
---|---|
Java I/O (0) | 2018.04.07 |
Java Collections (0) | 2018.04.07 |
OODP - Strategy Pattern (0) | 2018.04.07 |
OODP - Singleton Pattern (0) | 2018.04.07 |