4-2. (1) Single and Multi Thread

zhyun·2020년 9월 21일
0

HighJava

목록 보기
23/67

1. Single Thread

: Thread가 하나뿐인 프로그램을 말한다.

package kr.or.ddit.basic;
public class T01_ThreadTest {
	public static void main(String[] args) {
		//씽글 쓰레드 프로그램
		for(int i=1; i<=200; i++) {
			System.out.print("*"); // 별표 200개
		}
		System.out.println();//줄바꿈
		
		for(int i=1; i<=200; i++) {
			System.out.print("$");//달러 200개
		}
	}
}

2. Multi Thread Program

: Thread가 2개 이상인 프로그램을 의미한다.

3. Multi Thread의 실행 흐름

4. Multi Thread 프로그램 작성방법

Thread Ctrl+F2 누르면 정의
class Thread implements Runnable {
}

Runnable Ctrl+F2 누르면 정의
@FunctionalInterface
public interface Runnable {
public abstract void run();
}

순서

(1) Thread 클래스를 상속하여 만든 클래스를 이용하여 Thread생성

class MyThread1 extends Thread{ // Thread를 상속받아야지 클래스 생성 가능
	
	@Override
	public void run() { // thread클래스 안에 있는 run() 오버라이드 
		for(int i =1; i<=200; i++) {
//			System.out.print("*");
			System.out.print("오");
			try {
				//Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
				//시간은 밀리세컨드 단위를 사용한다.
				//즉, 1000ms는 1초를 의미한다.
				Thread.sleep(100);
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

(2) Runnable 인터페이스를 구현한 클래스의 인스턴스를 생성하여 Thread 생성하는 방법

class MyThread2 implements Runnable{

	@Override
	public void run() {
		for(int i =1; i<=200; i++) {
//			System.out.print("$");
			System.out.print("혁");
			try {
				//Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
				//시간은 밀리세컨드 단위를 사용한다.
				//즉, 1000ms는 1초를 의미한다.
				Thread.sleep(100);
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}	
}

(3) Thread 시작 메서드 start()

public class T02_ThreadTest {
	public static void main(String[] args) {

<방법1> Thread클래스를 상속한 class 'MyThread1'의 인스턴스 생성후

	 이 인스턴스의 start()메서드를 호출 => mainThread
	MyThread1 th1 = new MyThread1(); // 스레드 객체 'th1'생성후
	th1.start(); // 반드시 start()로 실행 => maintThread

<방법2> Runnable 인터페이스를 구현한 class 'Mythread2'의 인스턴스 생성 후

     이 인스턴스를 Thread객체의 인스턴스를 생성할 때 생성자의 매개변수로 넘겨준다.
     이때 생성된 Thread객체의 인스턴스의 start()메서드 호출
    MyThread2 r1 = new MyThread2(); // 인스턴스 생성
    Thread th2 = new Thread(r1); // 생성자의 매개변수로 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("@");
				System.out.print("♥");
				try {
					//Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
					//시간은 밀리세컨드 단위를 사용한다.
					//즉, 1000ms는 1초를 의미한다.
					Thread.sleep(100);//0.1초 //호출하고 있는 스레드가 잠드는것
				}catch(InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
		
	});
	th3.start();
		System.out.println("main 메서드 작업 끝..."); //Console창 상단 <terminate>뜸 : 프로그램이 끝났다는 뜻
	}
}
profile
HI :)

0개의 댓글