Thread 클래스를 사용하여 하나의 프로그램이나 하나의 메소드가 CPU 자원을 전부 점유하는 것을 막을 수 있다.
Thread를 사용하지 않은 경우
package oop0919;
class MyThread1 {
private int num;
private String name;
public MyThread1() {}
public MyThread1(int num, String name) {
this.num = num;
this.name = name;
}//end
public void start() {
run();
}//start() end
public void run() {
for (int a=0; a<num; a++) {
System.out.println(name + ":" + a);
}//for end
}//run() end
}//class end
public class Test02_thread {
public static void main(String[] args) {
// Thread 클래스
//-> 하나의 프로그램이나 하나의 메소드가 CPU자원을 전부 점유하는 것을 막을 수 있다
//1)쓰레드를 사용하지 않은 경우
MyThread1 t1 = new MyThread1(1000, "★");
MyThread1 t2 = new MyThread1(1000, "★★");
MyThread1 t3 = new MyThread1(1000, "★★★");
t1.start();
t2.start();
t3.start();
}//main() end
}//class end
쓰레드를 사용하지 않을 경우 t1.start()가 끝나면 t2.start()가 시작되고, t2.start()가 끝나야 t3.start()가 시작된다.
Thread를 사용한 경우
Thread 클래스 상속
- JVM이 쓰레드 관리자에 등록하고, start() 메소드가 run()을 호출한다.
- 예) 채팅, 실시간 예매 등에 많이 사용
package oop0919;
class MyThread2 extends Thread {
private int num;
private String name;
public MyThread2() {}
public MyThread2(int num, String name) {
this.num = num;
this.name = name;
}//end
//start() 함수는 run() 함수를 호출하는 기능
@Override
public void run() { //비지니스 로직 구현
for (int a=0; a<num; a++) {
System.out.println(name + ":" + a);
}//for end
}//run() end
}//class end
public class Test03_thread {
public static void main(String[] args) {
// 2)쓰레드를 사용한 경우
//->JVM이 쓰레드 관리자에 등록하고, start() 메소드가 run()을 호출한다
//->예) 채팅, 실시간 예매 등에 많이 사용
MyThread2 t1 = new MyThread2(1000, "★");
MyThread2 t2 = new MyThread2(1000, "★★");
MyThread2 t3 = new MyThread2(1000, "★★★");
t1.start();
t2.start();
t3.start();
}//main() end
}//class end
Thread를 사용하지 않았을 때와는 다르게 번갈아 가며 출력된다.
Runnable 인터페이스 상속
package oop0919;
class MyThread3 implements Runnable {
private int num;
private String name;
public MyThread3() {}
public MyThread3(int num, String name) {
this.num = num;
this.name = name;
}//end
@Override
public void run() {
for (int a=0; a<num; a++) {
System.out.println(name + ":" + a);
}//for end
}//run() end
}//class end
public class Test04_thread {
public static void main(String[] args) {
// 3) Runnable 인터페이스를 이용해서 쓰레드를 구현한 경우
/*
interface Runnable {}
class Thread implements Runnable {}
*/
Thread t1 = new Thread(new MyThread3(1000, "★"));
Thread t2 = new Thread(new MyThread3(1000, "★★"));
Thread t3 = new Thread(new MyThread3(1000, "★★★"));
t1.start();
t2.start();
t3.start();
}//main() end
}//class end
'웹개발 교육 > Java' 카테고리의 다른 글
[38일] Java (50) - 파일 입출력 (0) | 2022.09.20 |
---|---|
[37일] Java (49) - File 클래스 (0) | 2022.09.19 |
[37일] Java (47) - 상품 구매 및 반품 프로그램 (0) | 2022.09.19 |
[36일] Java (46) - generic (0) | 2022.09.16 |
[36일] Java (45) - Set, Map (0) | 2022.09.16 |