햄찌개

JAVA- Thread -싱글,멀티 본문

고급 JAVA

JAVA- Thread -싱글,멀티

햄찌개 2020. 9. 21. 17:02

Thread

- 스레드(Thread)란 프로그램의 실행 흐름을 의미함. 

- 프로세스 내에서 실행되는 세부 작업 단위이다. 

- 하나의 프로세스 내에는 여러 개의 쓰레드가 존재할 수 있다. 

- 경량화(lightweight) 프로세스라고도 부른다. - 두 개 이상의 스레드를 멀티스레드라고 부른다.

 

Thread의 특징 ( VS Process )

(1) 프로세스에 비해 문맥교환(Context Switching) 시간이 적게 걸린다.
(2) 스레드는 동료 쓰레드와 사용메모리를 공유할 수 있다.
(3) 스레드간의 통신은 프로세스간의 통신에 비해 시간이 적게 걸린다(빠르다).
(4) 스레드는 프로세스에 비해 생성 및 종료 시간이 적게 걸린다(빠르다).
(5) 스레드는 동료 쓰레드와 사용메모리를 공유할 수 있다

 

 

싱글 쓰레드

public class T01_ThreadTest {

	public static void main(String[] args) {
		//싱글 쓰래드 프로그램 
		for (int i = 0; i < 200; i++) {
			System.out.print("*");
		}
		System.out.println();
		
		for (int i = 0; i < 200; i++) {
			System.out.print("$");
		}
	}
}

 


멀티 쓰레드

public class T02_ThreadTest {

	public static void main(String[] args) {
		//멀티쓰레드 프로그램 방식
		
		/*
		 방법 1 : Thread클래스를 상속한 class의 인스턴스를 생성한 후
				이 인스턴스의 start()메서드를 호출한다.
		*/
		MyThread1 th1 = new MyThread1();
		th1.start();
		
		/*
		 방법 2 : Runnable인터페이스를 구현한 class의 인스턴스를 생성한후 
		 		이 인스턴스를 Thread객체의 인스턴스를 생성할 때 생성자의 매개변수로 넘겨준다.
		 		이 때 생성된 Thread객체의 인스턴스의 start()메서드를 호출한다.
		 */
		MyThrread2 r1 = new MyThrread2();
		Thread th2 = new Thread(r1);
		th2.start();
		
		/*
		 방법 3 : 익명 클래스를 이용하는 방법
		 		Runnable인터페이스를 구현한 익명클래스를 Thread인스턴스를 생성할 때 매개변수로 넘겨준다.
		 */
		Thread th3 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = 1; i <= 200; i++) {
					System.out.print("련  ");

					try {
						// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
						// 시간은 밀리세컨드 단위를 사용한다.
						// 즉, 1000ms 는 1초를 의미한다
						Thread.sleep(102);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				
				
			}
		});
		th3.start();
		
		
	}
	
	
	
	
}

class MyThread1 extends Thread {

	@Override
	public void run() { // thread클래스의 main 같은 역할을 하는 것이 run
		for (int i = 1; i <= 200; i++) {
			System.out.print("바");

			try {
				// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
				// 시간은 밀리세컨드 단위를 사용한다.
				// 즉, 1000ms 는 1초를 의미한다
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class MyThrread2 implements Runnable {

	@Override
	public void run() {
		for (int i = 1; i <= 200; i++) {
			System.out.print("보");

			try {
				// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
				// 시간은 밀리세컨드 단위를 사용한다.
				// 즉, 1000ms 는 1초를 의미한다
				Thread.sleep(101);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}
}

'고급 JAVA' 카테고리의 다른 글

JAVA - 단일, 멀티 쓰레드  (0) 2020.09.23
JAVA - 쓰레드 수행시간 체크  (0) 2020.09.23
JAVA - Lambda식  (0) 2020.09.21
JAVA - annotation  (0) 2020.09.18
JAVA - reflection  (0) 2020.09.18