본문 바로가기

자바

스레드(Thread)

스레드

스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.

모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.

 

동기적실행 - 일의 순서가 있다
데이터관점에서는 데이터의 일치

동기적실행이 안되어있다 - 데이터의 일치가 되어있지않다.


비동기적실행 - 일의 순서가 없다.

 

 

Thread.sleep - 단위 : 1/1000

결과값이 한번에 나오지않고 1초에 하나씩 나올것이다.

 

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

 

아래 코드 실행 순서

 

1. 일반 클래스 타입의 FakeThread가 실행 된다.

2. Runnable 인터페이스를 상속 받은 RealThread클래스가 실행 된다.

3. 이때 RealThread는 자신의 클래스 안의 run메서드가 실행된다.

4. 리얼 스레드가 실행 되면서 maind의 for문이 같이 동작하게된다.

 

실행 결과

스레드가 순차적으로 실행하는 것이 아니라 병행실행이 되었다.

스레드의 실행이 일관적으로 나타나지 않는 것을 확인 할 수 있습니다.

 

 

코드 상세설명 

스레드는 Runnable을 상속 받습니다.

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

 

RealThread는 Runnable 인터페이스를 상속 받습니다.

내부에 추상메서드를 사용하기 위해서 메서드를 생성해줍니다.

 

Thread 스레드 객체를 생성하는 곳에 Runnable을 상속받은 클래스(스레드)를 넣어줍니다.

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

run으로 바꿔서 실행을하면 동기적 실행처럼 보이게 해줍니다.

 

run()메소드와  start()메스드의 결과차이

왼쪽은 run()으로 실행한결과 오른쪽은 start()으로 실행한 결과

 

 

 

소스코드

package sock.th;

class FakeThread {
	public void run() {
		for (int i = 1; i < 11; i++) {
			System.out.println("페이크스레드 : "+i);
			try {
				Thread.sleep(1000); // 1/1000초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

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

	@Override
	public void run() {
		for (int i = 1; i < 11; i++) {
			System.out.println("리얼스레드 : "+i);
			try {
				Thread.sleep(1000); // 1/1000초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
}

public class ThEx03 {

	public static void main(String[] args) {
		
		// 페이크스레드 비동기 실행
		FakeThread ft = new FakeThread();
		ft.run();
		
		Thread t1 = new Thread(new RealThread());
		t1.start();
		
		// 메인 스레드 동작 부분
		for (int i = 1; i < 11; i++) {
			System.out.println("메인스레드 : "+i);
			try {
				Thread.sleep(1000); // 1/1000초
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

 

 

'자바' 카테고리의 다른 글

공공데이터 가져오기  (0) 2022.08.22
스트림(Stream)  (0) 2022.08.22
일반변수와 레퍼런스 변수  (0) 2022.08.21
자바를 DB연결  (0) 2022.08.12
자바 SMS 전송 라이브러리  (0) 2022.08.05