반응형
public class ThreadOutputCont {
// 출력할 변수
private int out = 0;
// 쓰레드 실행/종료를 위한 플래그
private boolean onOff = true;
public boolean isOnOff() {
return onOff;
}
public void setOnOff(boolean onOff) {
this.onOff = onOff;
}
public int getOut() {
return out;
}
public void setOut(int out) {
this.out = out;
}
}//위는 Thread 관리 컨트롤러
import java.util.Scanner;
//Thread를 상속
public class ThreadOutput extends Thread {
// 쓰레드 콘트롤러 클래스
private ThreadOutputCont toc = null;
// 생성자(인수로ThreadOutputCont 를 받음)
public ThreadOutput(ThreadOutputCont toc) {
this.toc = toc;
}
public void run() {
// ThreadOutputCont 클래스의 onOff가 true일동안 루프
while (toc.isOnOff()) {
// ThreadOutputCont 클래스의 out값을 출력
System.out.println(toc.getOut());
try {
// 1초대기
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadOutputCont toc = new ThreadOutputCont();
Scanner sc = new Scanner(System.in);
// 무한루프
while (true) {
// 새로운 입력이있으면
if (sc.hasNext()) {
// ThreadOutputCont 의 onOff플래그를 false로 변경
// false로 변경함으로써 쓰레드를 종료시킴
toc.setOnOff(false);
// 1초대기
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// ThreadOutputCont 의 on값을 새로운 입력값으로 변경
toc.setOut(sc.nextInt());
// 새로운 입력값을 출력하는 새로운 쓰레드 생성
ThreadOutput top = new ThreadOutput(toc);
// onOff플래그를 true로 변경
toc.setOnOff(true);
// 쓰레드 시작
top.start();
}
}
}
}
//위는 실행파일
반응형