반응형
먼저 A와 B만 무한 출력하는 클래스
TestOfThread, TestOfThread2를 만든 뒤에
ThreadCaller 클래스에서 TestOfThread, TestOfThread2를 객체화 한 후
run(), start() 시키는 코드인데
start() 테스트 시에는 run()을 start()로 바꿔주면 된다
스크린샷을 보면 왼쪽이 스레드 시작 시 run()을 사용했을 때
우측이 스레드 시작 시 start()를 사용했을 때 콘솔 창인데
보면 왼쪽은 a.run()이 무한 반복하므로
TestOfThread의 run() 메소드가 끝나지 않아 아래줄의 코드가 실행되지 않는 것이 보인다
반면 start() 메소드는 코드의 끝남 여부와 관계없이 스레드를 돌리면서
아래줄의 코드를 계속 수행하기 때문에 코드들이 뒤얽혀 있는 것이 보인다
여기서 포인트는
start()는 코드의 완료 여부와 상관없이 계속 아래 코드를 수행하기 때문에
멀티 스레드를 사용하는 경우에는 run()이 아닌 start를 사용해 줘야 한다는 것!
테스트에 사용한 코드는 아래를 참고해주면 된다
여기서 그냥 복붙 시 콘솔 라인 생기는 속도가 너무 빨라 확인을 하지 못할 수 있으므로
아래 글을 참고해 콘솔 최대 라인 수를 변경한 뒤에 테스트 해볼것을 권장한다
// 쓰레드1
public class TestOfThread extends Thread {
public TestOfThread() {
// Nothing
}
public void run() {
while(true) {
System.out.println("A"); // A 무한반복
}
}
}
// 쓰레드2
public class TestOfThread2 extends Thread {
public void TestOfThread2() {
// Nothing
}
public void run() {
while(true) {
System.out.println("B"); // B 무한반복
}
}
}
public class ThreadCaller {
public static void main(String[] args) {
TestOfThread a = new TestOfThread();
TestOfThread2 b = new TestOfThread2(); // 객체화
// start 시에는 쓰레드 돌리면서 아래 코드 수행
// run 시에는 run 완료 후 아래 코드 수행
a.start();
System.out.println("A PASS!");
b.start();
System.out.println("B PASS!");
}
}
반응형
'Language > Java' 카테고리의 다른 글
자바 변수의 스코프가 뭔말? (1) | 2020.02.06 |
---|---|
자바 소켓통신으로 단체 채팅 프로그램 만들기 (0) | 2020.02.02 |
자바 소켓 통신 서버와 클라이언트간 메세지 주고받기 (0) | 2019.12.18 |
자바 소켓 통신 서버 & 클라이언트 작성 및 연결해보기 (2) | 2019.12.12 |
자바 디버그 설정 및 실행방법 (0) | 2019.12.04 |
댓글