[JAVA] 스레드 Thread

2024. 7. 24. 17:24·JAVA

Java에서 스레드(Thread)는 독립적으로 실행할 수 있는 프로세스의 하위 실행 단위다. 여러 스레드를 사용하여 동시에 여러 작업을 수행할 수 있다. 각 스레드는 프로그램의 일부로서 개별적인 코드 흐름을 가지며, 동시에 여러 작업을 처리할 수 있도록 해준다.

자바에서 스레드를 생성하는 방법은 다음과 같이 두 가지 방법이 있다.

  • Thread 클래스를 상속하여 run() 메서드 구현
  • Runnable 인터페이스 구현

Runnable 인터페이스는 몸체가 없는 메서드인 run() 메서드 단 하나만을 가지는 인터페이스다.

스레드는 클래스에 Thread를 상속받은 다음, Thread가 가지고 있는 run() 메서드를 사용해 생성한다. 만약 클래스 상속이 어려운 경우에는 Runnable 인터페이스를 상속해 구현할 수 있다.

 

 

 

package thread;

// [스레드]
//  : 실질적으로 일을 수행하는 주체
class Thread01 extends Thread {

	@Override
	public void run() {
		for(int i=1;i<=10;i++) {
			System.out.println(i+" 첫번째 스레드 일하는 중.....");
		}
	}
}

// 인터페이스를 "강제"할때 쓰는 이유 == 추상 메서드의 오버라이딩 "강제"
class Thread02 implements Runnable {
	@Override
	public void run() {
		for(int i=1;i<=10;i++) {
			System.out.println(i+" 두번째 스레드 일하는 중.....");
		}
	}
}

public class Test01 {
	public static void main(String[] args) {
		Thread01 t1=new Thread01();
		Thread t2=new Thread(new Thread02());
		t1.start();
		t2.start();
		/*
      앱:사용자가 실행시킨 SW
백그라운드 프로세스:원래 수행중인 SW

앱(어플리케이션) == SW == 프로그램
프로세스 == 작업 == 실행중인 프로그램 == 메모리를 할당받은 프로그램

사용자가 설치한 것은 프로그램
프로그램을 더블클릭해서 실행시키면(메모리,CPU,자원을 할당하면) 프로세스
프로세스에서 실질적으로 일을 수행하는 주체 == 스레드
★ 병렬적으로, 개별적으로, 비동기적으로 일을 수행함
결론) 스레드가 일을 수행하면서 화면에 무언가 출력을 할텐데,
            출력되는 순서가 랜덤이다!
		 */
		for(int i=1;i<=5;i++){
			System.out.println(i+"초...");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

 

 

package thread;

class Person implements Runnable { // 실질적으로 buy()를 수행하는 주체 == 스레드
	private TicketPage page;
	public Person(TicketPage page) {
		this.page=page;
	}
	@Override
	public void run() {
		this.page.buy();
	}
}

class TicketPage {
	private static int ticket=3; // 공유자원
	public synchronized void buy() { // 동기화 <-> 비동기적으로 일을 수행하는 스레드
		if(TicketPage.ticket > 0) {
			TicketPage.ticket--;
			System.out.println(Thread.currentThread().getName()+"님이 티켓을 구매하셨습니다!");
		}
		else {
			System.out.println(Thread.currentThread().getName()+"님 티켓 구매 실패.....ㅠㅠ");
		}
	}
}

public class Test02 {
	public static void main(String[] args) {
		
		TicketPage page=new TicketPage();
		
		// 스레드 클래스는 생성자 오버로딩이 되어있구나!~~
		Thread t1=new Thread(new Person(page),"티모");
		Thread t2=new Thread(new Person(page),"아리");
		Thread t3=new Thread(new Person(page),"아무무");
		Thread t4=new Thread(new Person(page),"럭스");
		Thread t5=new Thread(new Person(page),"제드");
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
		
		
	}
}

'JAVA' 카테고리의 다른 글

[JAVA] JAVA 웹 크롤링 맛보기, 예시  (0) 2024.07.25
[JAVA] 파일 입출력 예제  (0) 2024.07.25
[JAVA] try-catch Exception (예외처리)  (1) 2024.07.24
[JAVA] 예제 - 응집도와 결합도를 고려해 학생부 프로그램 만들기  (0) 2024.07.18
[JAVA] 예제 - ArrayList를 이용하여 학생부 프로그램 만들기  (0) 2024.07.15
'JAVA' 카테고리의 다른 글
  • [JAVA] JAVA 웹 크롤링 맛보기, 예시
  • [JAVA] 파일 입출력 예제
  • [JAVA] try-catch Exception (예외처리)
  • [JAVA] 예제 - 응집도와 결합도를 고려해 학생부 프로그램 만들기
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    DispatcherServlet
    오블완
    어노테이션
    정처기 실기
    java
    @Component
    정보처리기사 실기
    티스토리챌린지
    MVC
    이벤트 스케줄러
    상속
    2-layered 아키텍처
    ViewResolver
    정보처리기사
    생성자
    @repository
    recoverabledataaccessexception
    jsp
    객체지향
    정처기
    멘토씨리즈 자바
    스프링 프레임워크
    @service
    수제비
    codeup 4891 : 행복
    Spring
    오버로딩
    html
    aop
    Di
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
[JAVA] 스레드 Thread
상단으로

티스토리툴바