스레드 상속
class TimeCounter extends Thread{
private int count = 0;
private String name;
public TimeCounter(int count, String name) {
this.count = count;
this.name = name;
}
public void countStart() {
while(count > 0) {
System.out.println(this.name + " 카운트 - " + this.count);
this.pause(1000);
this.count--;
}
}
//쓰레드 상속 시 반드시 런 구현
@Override
public void run() {
//쓰레드로 작업할 코드 작성
this.countStart();
}
private void pause(long millis) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Sample1 {
public static void main(String[] args) {
TimeCounter t1 = new TimeCounter(5, "t1");
TimeCounter t2 = new TimeCounter(3, "t2");
TimeCounter t3 = new TimeCounter(4, "t3");
/*
t1.countStart(); //1 2 3 순차적으로 소요, 5+3+4 = 12초
t2.countStart();
t3.countStart();
*/
//멀티쓰레드 동시에 한번에 실행, 5초면 끝남
t1.start();
t2.start();
t3.start();
//쓰레드에 정의 되어있는 스타트 , 스타트 하게 되면 스레드가 만들어지고 내부의 런 실행
//스타트가 실행되야지 런을 직접 실행하면 안됨 스타트 해야 new Thread 만들어짐 그리고
//그 안에서 런 실행되는 것
}
}
Runnable 인터페이스
class TimeCounter2 implements Runnable { // Runnable 이용
private int count = 0;
private String name;
public TimeCounter2(int count, String name) {
this.count = count;
this.name = name;
}
public void countStart() {
while(count > 0) {
System.out.println(this.name + " 카운트 - " + this.count);
this.pause(1000);
this.count--;
}
}
//쓰레드 상속 시 반드시 런 구현
@Override
public void run() {
//쓰레드로 작업할 코드 작성
this.countStart();
}
private void pause(long millis) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
enum Type { //이넘상수 정의하는 그자체로 상수화 되는것
NUMBER, POINT, STR, WEIGHT, HEIGHT
}
public class Sample2 {
public static void main(String[] args) {
Type t = Type.NUMBER;
System.out.println("이넘상수 : " + t);
System.out.println("메인 쓰레드의 메인 메서드 실행");
TimeCounter2 t1 = new TimeCounter2(5, "t1");
TimeCounter2 t2 = new TimeCounter2(3, "t2");
TimeCounter2 t3 = new TimeCounter2(4, "t3");
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
Thread thread3 = new Thread(t3);
//getState(); 스레드의 상태 알려줌
System.out.println(thread1.getState()); //NEW
thread1.start();
System.out.println(thread1.getState()); //RUNABLE
while(true) {
try { //1초 간격
Thread.sleep(1000); //Runable 동작가능 상태, Wait 기다리는 중
System.out.println(thread1.getState());
if(thread1.getState() == State.TERMINATED) {
System.out.println(thread1.getState());//Terminated 쓰레드종료
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
thread1.getState();
}
thread2.start();
thread3.start();
System.out.println("메인 쓰레드의 메인 메서드 종료");
//main메서드 실행되면 메인에 의해 생성된 스레드들은 독립적으로 저장되어 실행중인 것
}
}
'Java' 카테고리의 다른 글
[exam 17] 네트워크 정보 가져오기 (0) | 2021.09.11 |
---|---|
[210831] [exam15] 문자 기반 파일 입출력 (0) | 2021.09.11 |
[210831] [exam15] 바이트 기반 파일 입출력 (0) | 2021.09.11 |
[exam15] try ~ catch문 (0) | 2021.09.11 |
[exam12] 문자열 (String) 관련 메서드 (0) | 2021.09.11 |