Java

자바 Thread

H_u 2024. 5. 1. 17:06
728x90
반응형
SMALL

💡 학습 목표

  1. 쓰레드(Thread)란 뭘까?
  2. 쓰레드를 추가로 만들어서 사용하는 방법을 알아 보자.
  3. 쓰레드의 실행시 쓰레드 상태라는 개념을 알아 보자.

1. 쓰레드(Thread)란 뭘까?

Thread 란?

  • process란? 저장되어 있는 프로그램이 실행되면 OS로 부터 메모리를 할당받아 프로세스 상태가 된다.
  • 하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread이다.
  •  

 

2. 쓰레드를 추가로 만들어서 사용하는 방법을 알아 보자.

1. 첫번째 방법은 Thread 클래스 상속하여 만들 수 있습니다.

package basic.useful.ch05;

/**

* 쓰레드를 추가하는 방법 - 상속을 활용 할 수 있다. Thread --> Runnable --> run()

*/

public class MyThread extends Thread {

 

// 우리가 정의한 클래스에서 run() 메서드 재정의 할 수 있다.

// 쓰레드를 사용할 떄 알아야 하는 필수 개념 - 필수외움!

// 쓰레드가 가지고 있는 메서드 start() 호출시키면약속으로

// run() 메서더 호출되어 동작하게 만들어져있다.

@Override

public void run() {

// 우리가 동작 시키고자 하는 일을 정의 해서 코드를 설계 할 수 있다.

// 임무 -> 반복문 200번을 수행하라

for (int i = 0; i < 200; i++) {

System.out.print(i + ",");

 

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

}

 

} // end of class

 

package basic.useful.ch05;

 

public class MyThreadMainTest {

//기본적으로 메인 작업자 하나를 가지고 있다. 메인 쓰레드라 한다.

public static void main(String[] args) {

System.out.println(Thread.currentThread());

 

 

//필요하다면 추가 작업자를 사용할 수 있다.

MyThread th1 = new MyThread();

th1.start(); // start 호출되면 run() 메서드가 동작되게 약속 되어 있다.

System.out.println("---------------------");

 

//필요하다면 추가 작업자를 더 만들 수 있다

MyThread th2 = new MyThread();

th2.start();

 

}

 

}

 

 

package basic.useful.ch05;

 

public class Worker extends Thread{

 

private String name;

 

public Worker(String name) {

this.name = name;

}

//약속된 부분 --> run() 메서드를 정의 하면 된다.

@Override

public void run() {

 

for(int i = 0; i< 50; i++) {

System.out.println("worker : " + name + " : " + i);

 

try {

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

 

 

package basic.useful.ch05;

 

public class WorkerMainTest {

 

public static void main(String[] args) {

System.out.println("main 쓰레드 시작");

System.out.println(Thread.currentThread());

 

// 작업자 하나 만들어 내기

Worker worker1 = new Worker("워커1"); // 생성은 메인 쓰레드가 했다.

// 명령어를 통해서 워커1에게 너가 위임 받은 일을 시작해

worker1.start(); // 메인 쓰레드가 명령 내림

 

System.out.println("main 쓰레드 종료");

}

 

}

 

 

2. 두번째 방법은 Runnable 인터페이스 구현하여 만들 수 있습니다.

package basic.useful.ch05;

 

/**

* 쓰레드를 만드는 두번쨰 방법 Runnable 인터페이스를

* 활용하는방법

*/

public class MyThread2 implements Runnable {

 

// Thread 클래스에서 start 메서드가 호출 되면

// 동작하는 부분이라고 약속 되어 있다.

@Override

public void run() {

int i = 0;

while(i < 50) {

System.out.println("i :" + i);

i++;

}

 

}

 

}

 

 

package basic.useful.ch05;

 

public class MyThread2MainTest {

 

public static void main(String[] args) {

 

 

//문제 MyThread2 를 메모리에 올리고

//그 안에 정의된 run() 메서드를 호출 하시오

//힌트 --> Thread 문서를 반드시 확인 하시오.

System.out.println("start main thread");

MyThread2 myThread2 = new MyThread2();

myThread2.run();

//myThread2.run(); 일반 메서드 호출 임!!

 

//새로운 작업자를 생성해서 위임 시킬때는 Thread 안에 있는 start() 메서드를 호출해야 한다.

Thread thread1 = new Thread(myThread2);

thread1.start();

 

System.out.println("end main thread");

}

 

}

 

 

3. 쓰레드의 실행시 쓰레드 상태라는 개념을 알아 보자

Thread Status

 

정리

스레드(Thread)란?

스레드는 프로세스 내에서 실제로 작업을 수행하는 단위입니다. 모든 자바 프로그램은 메인 스레드에서 시작되며, 사용자는 추가적인 스레드를 생성할 수 있습니다. 각 스레드는 독립적으로 실행되며, 자신만의 호출 스택을 가집니다.(각 쓰레드의 스택 영역은 서로 격리되어 있습니다) 프로세스 내의 모든 스레드는 같은 Heap 메모리 공간과 다른 자원을 공유할 수 있습니다.

728x90
반응형
SMALL