seong

스레드 (비동기,동기) 본문

자바/자바 실습

스레드 (비동기,동기)

hyeonseong 2022. 8. 23. 15:01

스레드의 실행에는 두 가지가 있다.

1. 동기적 실행

  • - 프로그램의 실행에 순서가 있는 프로그램.

2. 비동기적 실행

  • - 프로그램의 실행에 순서가 없는 프로그램.
Thread.sleep - 단위 : 1 / 1000 , 실행 부분을 1초에 한번씩 동작


비동기 방식 , 스레드 작성해보기 

1. 스레드의 내부 정보 확인

스레드는 Runnable를 상속 받는다.

 

2. Runnable 내부 정보 확인

Runnable는 인터페이스이며 추상 메서드가 한개 있다.

 

3. RealThread 작성

1) Runnable 인터페이스를 상속 받는다.

2) 내부에 추상 메서드를 사용하기 위해 메서드 생성 해준다. 

 

4. main에서 확인

FakeThread 작성

 

4 - 1 .RealThread 작성(1)

Thread 스레드 객체를 생성 하는데 확인을 해보면 Runnable target라고 객체 타입이 있다

저기에 Runnable 을 상속받은 클래스(스레드) 를 넣어준다. 

 

4 - 1. RealThread 작성 (2) - start

run 으로 실행하면 동기적 실행처럼 보인다.

start를 사용해 작성하면 스레드가 정상적으로 실행 된다. 

start로 실행

실행 화면

위의 코드 실행 결과

  1. 일반 클래스 타입의 FakeThread가 실행 된다
  2. Runnable 인터페이스를 상속 받은 RealThread클래스가 실행 된다. 
  3. 이때 RealThread은 자신의 클래스 안의 run메서드가 실행
  4. 리얼 스레드가 실행 되면서 아래 main의 for문이 같이 동작 하게 된다. 

<소스코드>

package sock.th;

class FakeThread1{
	void run() {
		for (int i = 0; i < 11; i++) {
			System.out.println("FakeThread" + i);

			try {
				Thread thread = new Thread();
				thread.sleep(1000); // 1000은 1초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

// 메인스레드는 Runnable 인터페이스를 상속
class RealThread1 implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i < 11; i++) {
			System.out.println("RealThread" + i);

			try {
				Thread.sleep(1000); // 1000은 1초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	
}

public class ThExStudy {

	public static void main(String[] args) {
		
		// 페이크스레드 비동기 실행
		FakeThread1 ft = new FakeThread1();
		ft.run();
		
		Thread th = new Thread(new RealThread1());
		th.start();
		

		// 메인 스레드 동작 부분
		for (int i = 0; i < 11; i++) {
			System.out.println("MainThread" + i );

			try {
				Thread.sleep(1000); // 1000은 1초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}