Thread

이진석·2022년 8월 24일
1
post-thumbnail

20220824

한 번에 끝내는 Java/Spring 웹 개발 마스터


1) Thread란?

  • thread 하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread이다.

2) multi-threading이란?

  • 여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과를 뜻한다.

  • 각 thread 사이에서 공유하는 자원이 있을 수 있음 (자바에서는 static instance)


3) Thread클래스 상속해서 ThreadTest 클래스 생성

package ch20;

class MyThread extends Thread { 
	//Thread는 따로 구현해야 할 메소드가 반드시 있는건 아님.
	//Thread를 상속받아서 모든 메소드 사용이 가능하다.
	
	public void run() {
		
		int i;
		
		for(i = 1; i<=200; i++) {
			System.out.print(i + "\t");
		}
	}
}

public class ThreadTest {

	public static void main(String[] args) {

		System.out.println( Thread.currentThread() + "Start" ); //메인스레드 -> 1개
		MyThread th1 = new MyThread(); //Thread1 -> 2개
		MyThread th2 = new MyThread(); //Thread2 - > 3개
		
		th1.start();
		th2.start();
		System.out.println( Thread.currentThread() + "End" );
	}
}

4) Runnalbe Interface 구현해서 만들기

package ch20;

class MyRunnable implements Runnable { 
	//Runnalbe의 경우에는 Start가 바로 불가능 (Start는 Thread의 메소드)
	
	public void run() {
		
		int i;
		
		for(i = 1; i<=200; i++) {
			System.out.print(i + "\t");
		}
	}
}

public class ThreadRunnable {

	public static void main(String[] args) {

		System.out.println( Thread.currentThread() + "Start" ); //메인스레드 -> 1개

		MyRunnable runnable = new MyRunnable();
		
		Thread th1 = new Thread(runnable);
		Thread th2 = new Thread(runnable);
		
		th1.start();
		th2.start();
		
		System.out.println( Thread.currentThread() + "End" );
	}
}

  • 자바는 다중 상속을 허용하지 않기 때문에, 이미 다른 클래스를 상속하고 있는 경우, thread를 만들기 위해서 Runnable Interface를 구현해서 실행한다.

  • 사실, Thread에 대한 부분은 이해하기 어려웠다. 내가 이해하는 방식으로는 Runnable 인터페이스 안에서 여러개의 thread가 존재할 수 있고, 순서에 맞게 strat()를 통해서 run()할 수 있는 구조로 생각했다.

profile
혼자서 코딩 공부하는 전공생 초보 백엔드 개발자 / https://github.com/leejinseok0614

0개의 댓글