하나의 프로그램이나 하나의 메소드가 cpu자원을 전부 점유하는 것을 막을 수 있다.
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() {
//start를 통해서 부른다.
//기능구현은 run에서.
for(int a=0; a<num; a++) {
System.out.println(name+":"+a);
}//for end
}//run() end
}//class end
MyThread1 t1=new MyThread1(1000, "★");
MyThread1 t2=new MyThread1(1000, "★★");
MyThread1 t3=new MyThread1(1000, "★★★");
t1.start(); //★:0 - ★:999
//System.out.println(name+":"+a);
t2.start();
t3.start();
//t1이 다 나온 후 t2가 나오고 t2가 다 완료되어야 t3가 나온다.
💻 console
★:0
★:1
★:2
.
.
.
★:999
★★:0
★★:1
★★:2
.
.
.
★★:999
★★★:0
★★★:1
★★★:2
.
.
.
★★★:999
- 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;
}//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
MyThread2 t1=new MyThread2(1000, "★");
MyThread2 t2=new MyThread2(1000, "★★");
MyThread2 t3=new MyThread2(1000, "★★★");
t1.start();
t2.start();
t3.start();
💻 console
★:0
★★:0
★:1
★★:1
★:2
★:3
★:4
★:5
★:6
★:7
★:8
★:9
★:10
★:11
★:12
★:13
★★:2
interface Runnable {}
class Thread implements Runnable {}
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
Thread t1=new Thread(new MyThread3(1000, "★"));
Thread t2=new Thread(new MyThread3(1000, "★★"));
Thread t3=new Thread(new MyThread3(1000, "★★★"));
t2.start();
t2.start();
t3.start();
💻 console
★:0
★★:0
★:1
★★:1
★:2
★:3
★:4
★:5
★:6
★:7
★:8
★:9
★:10
★:11
★:12
★:13
★★:2