티스토리 뷰
쓰레드(Thread)란? 하나의 프로세스 내에서 존재하며, 경량 프로세스라 불린다.
프로세스의 자원을 공유한다.
하나의 프로세스는 한 개 이상의 스레드를 가지며, 한개의 (메인 스레드)로 시작
* 프로세스
- 실행중인 프로그램이다.
- 프로그램과 어플리케이션과 같은 의미로 사용
- 자신만의 자원을 갖는다.
- 다른 프로세스와 완전히 분리된다.
* 스레드
멀티 스레드(Multi-Thread) |
하나의 프로세스 안에 여러개의 메소드를 사용한다. (작업이 동시에 진행된다.) |
단일 스레드(Single-Thread) |
하나의 프로세스 안에 메인스레드만 존재한다. (프로세스 = 스레드) |
|
스레드의 생성 |
스레드의 실행 |
Thread 클래스 |
Class ExampleThread extends Thread{ public void run() { ..... } } | ExampleThread et = new ExampleThread(); et.start(); |
Runnable 인터페이스 | Class ExampleRunnable implements Runnable{ public void run() { ..... } } |
Thread rt = new Thread(new ExampleRunnable); rt.star();t |
* 스레드의 클래스
- Thread 클래스 메소드
메 소 드 |
내 용 |
Thread (String name) |
특정 이름을 가진 Thread 객체 |
Thread (Runnable target) |
target을 실행 스레드로 가지는 객체 |
Thread (Runnable target,String name) |
target을 실행 스레드로 가지고 특정 이름을 가지는 객체 |
static int activeCount () |
현재 활동중인 스레드 개수 |
String getName () |
스레드 이름 얻음 |
int getPriority () |
스레드 우선순위 값을 얻음 |
void interrupt () |
스레드를 멈춤 |
static void sleep (long sec) |
sec밀리초 만큼 현재 실행 중인 스레드 멈춤 |
void start () |
스레드 실행 메소드 |
static void yield () | 현재 실행 중인 스레드를 멈추고 다음 계획된 스레드를 실행 |
void join () | 다른 스레드를 멈추고 이 스레드를 끝까지 실행 |
void setDaemon (boolean bool) | 스레드의 데몬 여부 결정 |
쓰레드에 대한 이론를 마치며 실습을 통해 공부하겠습니다.
public class ExampleThread{ public static void main(String[] args) throws InterruptedException { EnglishLowerThread elt = new EnglishLowerThread(); Thread kt = new Thread(new KoreanThread()); // thread 클래스 내부에 있는 run() 메소드는 절대 호출하지 말자!!(Thread를 만든 의미가 없다.) // elt.run(); // kt.run(); // start() 메소드를 활용하여 쓰레드 작업 단위를 위한 메모리까지 설정한다. // 다른 쓰레드와 힙메모리 및 메소드 영역을 공유할 수 있게 된다. // 작업을 위한 메모리의 설정이 끝나면 run() 메소드에 작성된 코드가 실행된다. // 우선순위는 절대적인 기준은 아니다.. // main은 가장먼저 실행되어야 하기때문에 우선순위가 가장 높은 10점이다. elt.setPriority(Thread.MAX_PRIORITY); // 10점 (우선순위가 가장 높은) kt.setPriority(Thread.MIN_PRIORITY); // 1점 (우선순위가 가장 낮음) elt.start(); kt.start(); // 1) 영어 대문자 출력하기 for (char ch = 'A'; ch <= 'Z'; ch++) { // try { // Thread.sleep(100); // } catch (Exception e) { // e.printStackTrace(); // } System.out.println("대문자: " + ch); } // 다른 스레드가 끝나길 기다린다. // block상태의 일종 ( join()메소드는 신중하게 사용하여야 한다.) elt.join(); // elt 쓰레드가 끝날때 까지 아래쪽으로 못 넘어 간다. kt.join(); // kt 쓰레드가 끝날 때 까지 아래쪽으로 못 넘어 간다. System.out.println("프로그램 종료"); // 2) 영어 소문자출력하기 // for (char ch = 'a'; ch <= 'z'; ch++) { // System.out.println("\t소문자: " + ch); // } // 3) 한글 출력하기 // for (char ch = 'ㄱ'; ch <= 'ㅎ'; ch++) { // System.out.println(" 한글: " + ch); // } } }
영어소문자 쓰레드
// Thread 클래스를 상속받아서 만드는 형태 public class EnglishLowerThread extends Thread { // 쓰레드가 시작 되었을 떄 수행되는 메소드 // main과 같은역할을 한다. // 작업 단위 // run()이 끝난다: Thread가 종료된다. @Override public void run() { for (char ch = 'a'; ch <= 'z'; ch++) { // try { // Thread.sleep(100); // } catch (Exception e) { // e.printStackTrace(); // } System.out.println("\t소문자: " + ch); } } }
한글 쓰레드
// Runnable 인터페이스 implements // run 메소드를 오버라이딩 받아야 한다. public class KoreanThread implements Runnable { @Override public void run() { for (char ch = 'ㄱ'; ch <= 'ㅎ'; ch++) { // try { // Thread.sleep(100); // } catch (Exception e) { // e.printStackTrace(); // } System.out.println("\t\t한글: " + ch); } } }
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 파일 입출력1 (Stream, Buffered) (0) | 2017.05.17 |
---|---|
자바 ! 동기화 (Synchronization , synchronized) (1) | 2017.05.16 |
자바 ! 컬렉션 프레임워크 ( Collection Framework , List, ArrayList, HashSet, TreeSet, HashMap, Iterator) (0) | 2017.05.14 |
자바 ! 제네릭( Generic ) (0) | 2017.05.13 |
자바 ! 객체 타입 판별, 배열 ( instanceof , Array, for - each) (0) | 2017.05.10 |