(자바)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()를 호출할 때까지 대기한다.