티스토리 뷰
쓰레드(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 |
