자바(Java) - 쓰레드란? start와 run의차이

2023. 4. 3. 14:17·JAVA-기초/JAVA기본
728x90
반응형
SMALL

Java는 단일 쓰레드 언어이기 때문에 한 번에 하나의 작업만 수행할 수 있습니다. 그러나 Java 비동기 처리를 위한 여러 가지 메커니즘을 제공합니다.

예를 들어, setTimeout 함수를 사용하여 지정된 시간이 지난 후에 함수를 실행할 수 있습니다. 이 경우에는 작업이 백그라운드에서 처리되고, 타이머가 만료되면 이벤트 루프가 해당 함수를 호출합니다.

또한 웹 워커(Web Workers)를 사용하여 백그라운드 스레드에서 실행되는 별도의 Java파일을 만들어 실행할 수 있습니다. 이 경우에는 워커 스레드에서 실행되는 코드와 메인 스레드에서 실행되는 코드가 분리되어 있습니다.

 

여기에 예시 코드가 있습니다:


// setTimeout을 사용하여 비동기적으로 작업을 예약하는 예시 코드
console.log("start");

setTimeout(() => {
  console.log("Hello from setTimeout");
}, 1000);

console.log("end");

 

 

 

위의 코드는 "start"를 출력한 후에 1초 후에 "Hello from setTimeout"을 출력합니다. setTimeout 함수가 호출되면 작업은 백그라운드에서 예약되고, 메인 스레드는 다음 코드를 실행합니다. 1초 후에 백그라운드에서 실행되던 작업이 완료되면 이벤트 루프가 해당 작업을 처리하고 콘솔에 "Hello from setTimeout"을 출력합니다.

start와 run의 차이점은 다음과 같습니다:

  • start: 새로운 스레드를 시작하는 함수입니다. 이 함수를 호출하면 새로운 스레드가 만들어지고, 해당 스레드에서 지정된 함수가 실행됩니다.
  • run: 현재 스레드에서 함수를 실행하는 함수입니다. 이 함수를 호출하면 현재 스레드에서 지정된 함수가 실행됩니다.

Java는 단일 쓰레드 언어이기 때문에, start 함수를 사용하여 새로운 스레드를 만들더라도 실제로 동시에 두 개의 작업이 수행되는 것은 아닙니다. 대신에, start 함수를 호출하여 새로운 스레드에서 실행할 작업을 예약합니다. 이러한 작업은 메인 스레드에서 실행되는 작업과 마찬가지로 이벤트 루프를 통해 처리됩니다.

 

 

Java에서 start와 run의 차이를 보여주는 예시 코드와 결과는 다음과 같습니다.

 

 

start 함수 예시 결과:


function longRunningOperation() {
  // 긴 작업을 수행하는 코드
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }
  return result;
}

console.log("Start");

// start 함수를 사용하여 새로운 스레드에서 longRunningOperation 함수를 실행합니다.
const thread = new Worker(URL.createObjectURL(new Blob([`(${longRunningOperation})()`])));

// 작업이 완료되면 결과를 출력합니다.
thread.onmessage = (event) => {
  console.log(`Result: ${event.data}`);
};

console.log("End");
 start 함수 예시 결과:
Start
Result: 499999999500000000
End

위의 코드는 start 함수를 사용하여 새로운 웹 워커 스레드에서 longRunningOperation 함수를 실행합니다. 스레드에서 작업을 수행하는 동안 메인 스레드는 다른 작업을 수행할 수 있으므로 "Start"와 "End"가 즉시 출력됩니다. 스레드에서 작업이 완료되면 onmessage 핸들러가 호출되어 결과를 출력합니다.

run 함수 예시 코드:


function longRunningOperation() {
  // 긴 작업을 수행하는 코드
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }
  return result;
}

console.log("Start");

// run 함수를 사용하여 현재 스레드에서 longRunningOperation 함수를 실행합니다.
const result = longRunningOperation();

console.log(`Result: ${result}`);
console.log("End");

 

 

 

 

run 함수 예시 결과:

Start
Result: 499999999500000000
End

위의 코드는 run 함수를 사용하여 현재 스레드에서 longRunningOperation 함수를 실행합니다. 작업이 완료될 때까지 메인 스레드는 다른 작업을 수행하지 않으므로 "Start", "Result", "End"가 순서대로 출력됩니다.

728x90
반응형
SMALL

'JAVA-기초 > JAVA기본' 카테고리의 다른 글

[Java] 객체지향개념(OOP) 캡슐화와 정보은닉  (3) 2023.09.03
객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙  (64) 2023.08.12
자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅)  (0) 2023.02.09
자바(Java) 다형성(조상클래스,자손클래스)  (0) 2023.02.09
자바(Java) 인스턴스(객체), 객체 배열  (0) 2023.02.08
'JAVA-기초/JAVA기본' 카테고리의 다른 글
  • [Java] 객체지향개념(OOP) 캡슐화와 정보은닉
  • 객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙
  • 자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅)
  • 자바(Java) 다형성(조상클래스,자손클래스)
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      spring redis
      JSP
      리눅스마스터2급
      리눅스마스터2급정리
      java
      백준
      리눅스
      Spring
      Springframework
      JS
      springsecurity
      jsp request
      자바 면접질문
      HTML
      Spring Data Redis
      자바 알고리즘
      Til
      스프링프레임워크
      자바
      자바스크립트
      자바 면접
      자바기초
      redis 채팅
      레디스
      redis
      jsp기초
      JavaScript
      프로그래머스
      자바 반복문
      CSS
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    자바(Java) - 쓰레드란? start와 run의차이
    상단으로

    티스토리툴바