Thread 란 무엇일까??
Thread는 프로세스 내부에서 독립적으로 실행되는 각각의 작업 단위를 지칭합니다.
다음의 코드는 Thread를 이용하지 않고 실행했을 경우입니다.
public class PrThread extends Thread {
String name ;
public PrThread(String a){name=a;}
public void run() {
System.out.println("내 이름은 "+name+"입니다");
for (int i = 0; i < 4; i++) {
System.out.println("첫번째 " + i + " 입니다");
}
System.out.println();
}
public static void main(String[] args) {
String[] a = {"이재관","고양이","코딩"};
for(int i=0; i<a.length; i++) {
PrThread pr = new PrThread(a[i]);
pr.run();
System.out.println();
}
}
}
//호출
내 이름은 이재관입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다
내 이름은 고양이입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다
내 이름은 코딩입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다
우리가 원래 아는 프로세스대로 run()이라는 메서드를 실행했을 때 하나의 작업이 끝난 뒤에
다음 작업을 실행하는 것을 볼 수 있습니다.
다음의 코드는 Thread를 이용했을 때의 코드입니다.
public class PrThread extends Thread {
String name ;
public PrThread(String a){name=a;}
public void run() {
System.out.println("내 이름은 "+name+"입니다");
for (int i = 0; i < 4; i++) {
System.out.println("첫번째 " + i + " 입니다");
}
System.out.println();
}
public static void main(String[] args) {
String[] a = {"이재관","고양이","코딩"};
for(int i=0; i<a.length; i++) {
PrThread pr = new PrThread(a[i]);
pr.start();
System.out.println();
}
}
}
//출력
내 이름은 코딩입니다
내 이름은 이재관입니다
내 이름은 고양이입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 0 입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다
첫번째 2 입니다
첫번째 1 입니다
첫번째 3 입니다
첫번째 2 입니다
첫번째 3 입니다
이전에 Thread를 응용했을 때와는 다르게 출력값이 뒤죽박죽인 걸 볼 수 있습니다.
왜 이런 출력값이 나왔을 까요?
그 이유는 Thread를 상속받은 class의 객체를 만든 뒤 참조변수명. start()를 하게 되면
run() 메서드가 실행이 되는데 이때 run() 메서드 안의 명령들이 동시다발적으로 이루어지기 때문입니다.
때문에, 저 코드를 실행시시키게 되면 출력값의 순서들이 계속 변하는 것을 확인할 수 있습니다.
기존에는 한 번에 하나의 행동밖에 하지 못했지만 Thread를 활용하면 동시에 두자기 이상의 활동이 가능해지게 됩니다.
ex) 세탁기를 돌리면서 밥을 먹으면서 유튜브를 본다 /
Thread 구현 방법
이러한 장점이 있는 Thread를 구현하는 방법에 대해 알아봅시다.
Thread를 구현하는 데에는 두 가지 방법이 있습니다.
기본적으로 Thread를 통해 구현하려는 메서드는 run()을 사용하고
그 run()을 실행시키는 방법으로 start()를 사용합니다.
1. Thread 클래스 상속 (Thread를 상속받고 객체를 만들어 사용) --> 위의 코드 둘 다 이를 사용하였습니다.
2. Runnable 인터페이스 상속(Runnable을 implements 한 뒤 Thread 클래스로 객체생성)
public class Thread3 implements Runnable {
@Override
public void run() {
System.out.println("안녕");
}
public static void main(String[] args) {
Thread thread = new Thread(new Thread3());
thread.start();
}
}
'Java > Java' 카테고리의 다른 글
Java _ 래퍼 클래스(Wrapper Class) (0) | 2023.01.29 |
---|---|
Java StringBuilder vs StringBuffer /Thread (0) | 2023.01.21 |
Java StringBuilder 사용하는 이유와 사용법 (0) | 2023.01.21 |
Java 객체지향 프로그래밍 static (class 변수, instance변수) (0) | 2023.01.15 |
Java 문자열 나누는 방법, 문자열 자르기 ( substring(), split()) (0) | 2023.01.15 |