○ Thread 클래스
- 하나의 프로그램이나 하나의 메소드가 CPU자원을 전부 점유하는 것을 막을 수 있다
- 실시간 채팅, 실시간 예매 등에 많이 사용
① 쓰레드를 사용하지 않은 경우
class MyThread1 {
private int num;
private String name;
public MyThread1() {}
public MyThread1(int num, String name) {
this.num = num;
this.name = name;
}
public void start() {
run();
}//start() end
public void run() {
for(int a=0; a<num; a++) {
System.out.println(name+":"+a);
}
}//run() end
}//class end
public class Test02_thread {
public static void main(String[] args) {
MyThread1 t1 = new MyThread1(1000, "★");
MyThread1 t2 = new MyThread1(1000, "★★");
MyThread1 t3 = new MyThread1(1000, "★★★");
t1.start();
t2.start(); //t1이 1000개가 끝날 때까지 t2는 기다림, 순차적
t3.start(); //t1, t2가 끝날 때까지 t3는 기다림
}//main() end
}//class end
② 쓰레드를 사용한 경우
- JVM이 쓰레드 관리자에 등록하고, start()메소드가 run()을 호출한다
class MyThread2 extends Thread {
private int num;
private String name;
public MyThread2() {}
public MyThread2(int num, String name) {
this.num = num;
this.name = name;
}
//start()함수는 run()함수를 호출하는 기능이라 따로 override하지 않음
@Override
public void run() { //비지니스 로직 구현
for(int a=0; a<num; a++) {
System.out.println(name+":"+a);
}
}//run() end
}//MyThread2 class end
public class Test03_thread {
public static void main(String[] args) {
MyThread2 t1= new MyThread2(1000, "★");
MyThread2 t2= new MyThread2(1000, "★★");
MyThread2 t3= new MyThread2(1000, "★★★");
t1.start();
t2.start();
t3.start(); // t1이 실행되면서 빈곳에 t2, t3가 끼어들어간다
}//main() end
}//class end
○ Runnable 인터페이스를 이용한 쓰레드 구현
- 다른 클래스를 상속받으면서 thread를 적용해야 할 때
- interface Runnable {}
class Thread implements Runnable {}
- Runnable 인터페이스에는 run()만 있기 때문에, 구현하기 위해서는 Thread도 활용해야함(다형성 이용)
class MyThread3 implements Runnable {//interface는 다중상속 가능
private int num;
private String name;
public MyThread3() {}
public MyThread3(int num, String name) {
this.num = num;
this.name = name;
}
@Override
public void run() {
for(int a=0; a<num; a++) {
System.out.println(name+":"+a);
}
}
}//MyThread3 class end
public class Test04_thread {
public static void main(String[] args) {
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(); // Test_03과 결과는 동일
}//main() end
}//class end
'Backend > JAVA_Basic' 카테고리의 다른 글
26. JAVA, File 클래스 (input, output) (0) | 2022.06.09 |
---|---|
25. JAVA, 상품 구매 및 반품 프로그램 (상속, 오버라이드 등 연습) (0) | 2022.06.08 |
23. Java Collection Framework (List, Set, Map, generic) (0) | 2022.06.07 |
22. JAVA, 예외 처리 (Exception, try~catch, finally, throws) (0) | 2022.06.06 |
21. JAVA, 추상화 (추상 클래스, 추상 메소드, 인터페이스, 익명내부객체) (0) | 2022.06.05 |
댓글