티스토리 뷰

쓰레드(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);
		}
	}
}


반응형
LIST
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   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
글 보관함