Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

쓰레드 본문

Computer Engineering/JAVA

쓰레드

jaehoonx2 2018. 4. 7. 17:41

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