(자바)Thread, 스레드 정리
2022. 1. 6. 18:05ㆍ자바 (Java)
스레드(Thread)
- 운영 체제에 의해 관리되는 하나의 작업 혹은 태스크
- 다수의 스레드를 동시에 작동시키도록 응용프로그램을 작성하는 것을 멀티 스레딩
- JVM에 의해 스케줄링 되고 관리되는 실행 단위 코드
구현 조건 | |
Thread 클래스 상속 | 1. extends Thread 2. 수행할 작업 코드를 run() 메소드로 오버라이딩 3. 스레드 객체 생성:ex)TimerThread th=new TimerThread(); 4.스레드 시작, start()메소드 호출: th.start() |
Runnable 인터페이스 상속 | 1. interface Runnable 2. 수행할 작업 코드를 run() 메소드로 오버라이딩 3. 스레드 객체 생성 :ex)TimerThread th=new TimerThread(); 4.스레드 시작, start()메소드 호출: th.start() |
타이머 스레드에서 run() 오버라이딩 코드
@Override
public void run() {
int n = 0;
while (true) {
timerLabel.setText(Integer.toString(n));//레이블에 카운트 값 출력
n++; // 카운트 증가
try {
Thread.sleep(1000); //1초동안 잠을 잔다
} catch (InterruptedException e) {
return;//예외가 발생하면 run()메소드 종료, 스레드 종료
}
}
}
스레드 종료
다른 스레드가 interrupt()메소드를 호출하면 스레드에 InterruptedException이 발생하며 다른 스레드가 리턴하면서 스레드가 종료된다.
public void mousePressed(MouseEvent e) {
if (!th.isAlive())
return;
th.interrupt();} //TimerThread 강제종료
main()스레드 ▲
while (true) {
try {
Thread.sleep(20); //20ms잠자기
} catch (InterruptedException e) { //예외 받고
return;//스스로 리턴해서 종료
}
}
이를 받는 다른 메소드 스레드 ▲
스레드 동기화
- 공유 데이터에 대해 동시 접근하는 두 개 이상의 스레드 충돌로 인해 값이 비정상적으로 유지되지 않도록 제어하는 기술
- 메소드나 코드 블럭앞에 Synchronized 키워드를 먼저 붙이면 먼저 실행한 스레드가 락을 걸어 다른 스레드가 진입하지 못하게 한다.
- Object를 상속받는 모든 클래스는 wait(), notify()메소드를 가지고 있으며 wait()을 호출하면 다른 스레드가 notify()를 호출할 때까지 대기한다.
'자바 (Java)' 카테고리의 다른 글
(이클립스) 디버깅(Debug, Dubugging) (1) | 2022.02.02 |
---|---|
(이클립스) 이미지, 사진 불러오기, 사진 넣기, 사진 가져오기 (0) | 2022.01.14 |
(자바) 오버로딩 vs 오버라이딩 (2) | 2021.12.26 |
(자바) instance(인스턴스), static(스테틱), 메소드 처리 방식 (0) | 2021.12.22 |
(자바)컬렉션과 제네릭 요점 정리 (1) | 2021.12.20 |