Programming Language/Java

[JAVA]명품 JAVA Programming 실습문제 13-2 (Thread)

Gongdile 2018. 4. 19. 18:16

실습문제 정리하려고한다.

스레드는 내가 공부를 처음하는 부분이라서  

익숙하지가 않아서 정리도 좀하고..봐야겠다.. 


선생님과 같이풀었던 실습문제들 정리. .. 


이 문제를 보고 일단 생각해야할건.. 

1. 문자열을 0으로 설정하고 

2.레이블 클릭시 0.1초에 1씩 증가하는 카운팅. 

3.다시한번 클릭시 카운팅 중단 -->그리고 처음부터 시작.


스레드 중지시키기 위해서 interrupt( )메소드를 사용하고 

스레드가 살아 있는지 확인 위해서는 Thread.is Alive( )메소드 이용 


그럼일단 Swing을 이용해서 프로그램을 짠다. 

프로그램 클래스명 이름은 CountingControlFrame.java 라고 설정하겠다. 


자바의 GUI응용프로그램중에서 Swing을 사용하는것인데.. 프레임이나 컴포넌트 관련한 설명은 

추후에 설명하겠다. (왜냐면 이거 정리하는것도... 시간이 ㅋ_ㅋ )!! 


저 문제 프로그램의 구성블록을 그냥 캡처안에서 여기서 바로 정리했다 그림판으로.. 관계에 대해서

이해하려는 이유로 정리했다 저 네모박스는 { } 을 의미한다.

관계가 한눈에 들어오겠죠!! 


이런식으로 지금 프로그램이 구성되어있다. 코드는 주석으로 상세하게 설명했다. 

보고 참고하기.. 

파일첨부는 언젠가.. 

겉에 보이는 폼을 만들어준 부분이다.. 이제 안에 코드를 넣어야겠지.



코드가 잘보이는지 모르겠다... 이런 관계로 이러지는건데 


boolean bPaused =true;는 불리언 논리형은 디폴트값이 false인데 true로 초기화해주고 선언한거다.

내가 만약에 초기값을 true로 선언해주지않으면 기본값이 false기때문에 

아래 while문에서 실행이되지않으므로 프로그램 실행시 초가 증가하지 않는다. 


else 아래 Thread.start( ); 부분이 보이나? 

스레드는 한번 죽으면 새로 만들어야한다. ->다시 중지했다가 시작하고 이런게 아니다.

run이끝나면 무조건 쓰레드는 무조건 사라지므로 else if, else 는 내가 해줘야하는 부분이다.


new스레드에서 스레드가 만들어져서 변수가 스레드를 가르킨다. 

근데 이 스레드가 끝나면 사라져버린다.. 

그렇다고 변수값이 바뀌냐?? -->NO! 안바뀐다.!! 100번지 들어있다가 200번지되냐? 아니다.

왜냐하면 스레드가 NULL이 아니기 대문에... NULL은 아니고 죽어있으니까 다시 붙이면된다.

스레드가  한번 만들어서 죽어버리면 Null이 안된다. 

처음에는 null이다 그래서처음에 if문으로 null일때 만들어준거다. 


하지만 만들었을때 100번지를 가르키면 얘는 100번지를 가지고있을거다.

사라지더라도 타이머스레드의 100이라는 주소는 존재한다. 


스레드가 살았냐~ 죽었냐~ 로 판단하는거다.. 


다음은 이제 아래의 run code를 보자 


여기서 while(true)말고 

while(bPaused)라고해도 돌아간다. 


러너블이라는 인터페이스를 상속받았기 때문에 런이라는 메소드를 오버라이딩 해줘야한다. 

-->인터페이스, 상속, 오버라이딩 이라는 부분이 이해가 안가시는분은 구글링이나 검색을 .. 해보셔야한다!! 


오버라이딩은 부모에게 상속받은 메소드를 or 클래스를 내입에 맞게 재정의해서..사용하는걸 말한다


인터페이스를 사용하면 꼭 그안에있는 메소드나 클래스를 구현해줘야하는데 


나는 스레드에서 러너블이라는 인터페이스를 사용한 클래스를 만들었기 때문에 

지금 런이라는 메소드를 오버라이딩 해주고있는거다. 


런이 실행되는게 true면 0에서부터 value값을 증가해주는거고 

인터럽트가 걸리면 캐치문에서 원래 value초기값을 주고 끝내버린다. 



마지막으로 메인함수에서 내가만든 프레임을 실행한다고 new! 해주면 메인에서 돌아간다

메인에서 countingcontrolframe()을 실행시키면 아까 위에서 내가 만든 함수를 타고 생성된다..

겉껍데기 만들고 안에 돌아가는거 해주고 저 맨위에 그림을 보면서 전반적으로 구조를 판단하기.. 


실행하면 마우스 클릭시 실행되면서 숫자가 점점 올라가고 다시 클릭하면 0으로 초기화된다.