JAVA-Thread-MultiThread

 

[Multi Thread]

Thread: 프로세스에서 하나의 최소 실행단위 (method)

Thread 생성방법

1. Thread 클래스 를 상속 -> class Test extends Thread{}

반드시 Thread 상속할 경우 run()함수 재정의 해야함

2. implements Runnable 구현 -> class Test implements Runnable {}

반드시 run() 추상함수 재정의

POINT: Thread_2 implements Runnable » Thread가 아니다, Thread가 될 수 있는 요건만 갖췄다

why 2가지 제공

class Test extends Car implements Runnable -> Runnable 인터페이스 사용하는 이유: 다른 상속을 받기 위해서

Thread 추상 클래스 아닌 일반 클래스

추상클래스라면: new(객체 생성) 할 수가 없음

-> 멀티쓰레드는 동시에 실행되는 것이 아니라 동시에 실행될 수 있는 상황을 만들어주는 것

start()는 메인함수에 올라가고 새로운 stack에 run()을 올리고 사라진다

class Thread_1 extends Thread {
	@Override
	public void run() { //새로운 stack에 처음 올라가는 함수 (마치 main함수 처럼)
		for(int i = 0; i < 1000; i++) {
			System.out.println("Thread_1: " + i + this.getName());
		}
		System.out.println("Thread_1 run() END");
	}
}

class Thread_2 implements Runnable {
	@Override
	public void run() {
		for(int i = 0; i < 1000; i++) {
			System.out.println("Thread_2: " + i);
		}
		System.out.println("Thread_2 run() END");
	}
}


public class Ex02_Multi_Thread {
	public static void main(String[] args) {
		System.out.println("Main Start");
		
		//1번
		Thread_1 th = new Thread_1();
		th.start(); //POINT > stack 생성하고 stack run() 올려놓기
		
		//2번
		Thread_2 th2 = new Thread_2();
		Thread thread = new Thread(th2); //일반 클래스
		thread.start(); //POINT > stack 생성하고 stack run() 올려놓기
		
		for(int i = 0; i < 1000; i++) {
			System.out.println("main: " + i);
		}
		System.out.println("Main END");
		
	}
}

Ex)

~~~java import javax.swing.JOptionPane;

class WordTime extends Thread{ @Override public void run() { //main for(int i = 10; i > 0; i–) { System.out.println(“남은시간: “ + i); try { Thread.sleep(1000); //대기실에서 1초간 쉬어 }catch (Exception e) { System.out.println(e.getMessage()); } } } }

public class Ex04_Multi_word_game { public static void main(String[] args) { WordTime timer = new WordTime(); timer.start();

	String inputdata = JOptionPane.showInputDialog("값을 입력하세요");
	System.out.println("입력값: " + inputdata);
} }