Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 자바 멀티스레딩
- 메서드 오버로딩
- 컴파일
- function
- 생성자
- While
- break문
- JAVA객체지향
- continue문
- this예약어
- 인텔리제이 한글 깨짐 해결법
- for문
- Java
- 메서드
- 접근제어지시자
- 연관관계
- 집합관계
- Thread
- multi-threading
- 상수
- Java데이터 타입
- 시스템 환경 변수 편집
- 형 변환
- IntelliJ IDEA
- 포함관계
- java변수
- JAVA기초
- 반복문
- OPP개념
- 인텔리제이 기초 설정
Archives
- Today
- Total
최원종의 개발 블로그
Thread 본문
Thread : 하나의 프로세스는 하나 이상의 thread를 가지게 되며, thread는 자바에서 실제 작업을 수행하는 단위이다.
- process란 실행 중인 프로그램이 실행되면 OS로부터 메모리를 할당받아 프로세스 상태가 된다
- process는 실행 중인 프로그램 자체 (ex: 크롬 하나 실행, 카카오톡 하나 실행)
- Thread는 그 프로세스 안에서 실제 일을 하는 실행 흐름 (ex: 크롬 안에서 입력 처리, 동영상 재생, 네트워크 통신 등등)
프로세스 = 큰 작업 공간
스레드 = 그 안에서 일하는 작업자

run()과 start() 차이
run()
- 그냥 메서드 호출
- 새 스레드가 안 만들어짐.
start()
- 운영체제에게 새 스레드를 실행하라고 요청함.
- 그러면 새 스레드가 만들어지고 그 안에서 run()이 실행.
Thread 상태 종류
NEW : 스레드 객체만 생성됨
RUNNABLE : 실행 가능한 상태
TIMED_WAITING : sleep() 등으로 잠시 대기
WAITING : 다른 작업 기다리는 상태
TERMINATED : 실행 종료
Thread 클래스 상속 코드
package com.tenco.thread;
/**
* 기본 문법 복습
* 1. 상속을 사용해서 쓰레드를 만들 수 있다 (작업자 만들기)
*/
public class Worker extends Thread {
private String name;
public Worker(String name) {
this.name = name;
}
// 약속되어 있는 부분 run() 안에 해야할 일의 정의한다.
// start() 실행시키면 run() 안에 부분이 동작 한다.
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.print("worker " + name + " : " + i + "\n");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
package com.tenco.thread;
public class WorkerMain {
// 메인 쓰레드
public static void main(String[] args) {
// 사용하는 방법
System.out.println("---- main 쓰레드 시작 ----");
System.out.println(Thread.currentThread());
// 작업자 하나 만들어 내기 (만드는 일은 메인 쓰레드가 한다)
Worker worker1 = new Worker("워커1");
// 너가 위임 받은 일을 시작해
worker1.start();
System.out.println("---- main 쓰레드 종료 ----");
} // end of main
}
Runnable 인터페이스 구현 코드
package com.tenco.thread;
// 쓰레드를 사용하는 문법
// 2번째. Runnable 인터페이스를 구현해서 쓰레드를 만들 수 있다.
public class Worker2 implements Runnable {
// run() -> 위임 시키고자 하는일 명시하는 곳
// 실행은 Thread().start() 로 호출해야 여기 부분이 일을 한다.
@Override
public void run() {
int i;
for(i = 0; i < 200; i++) {
System.out.print(i + "\t");
}
}
}
-Thread객체를 생성 후 생성자에 Runnable 타입을 넣어서 start()메서드 호출 가능
package com.tenco.thread;
public class WorkerMain2 {
public static void main(String[] args) {
System.out.println("main thread start");
Worker2 worker2 = new Worker2(); // 메인 쓰레드가 서브 쓰레드 생성
// worker2.start();
//orker2.run(); // run() 메서는 그냥 메서드를 호출할 뿐이지 쓰레드를 동작시킨건 아니다. 주의
// 익명 클래스
new Thread(worker2).start(); // 서브 작업자가 일을 시작 함
System.out.println("main thread end");
}
}
'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| 멀티 스레딩(multi-threading) (0) | 2026.03.13 |
|---|---|
| Inner class(중첩 클래스) (0) | 2026.03.12 |
| Exception(예외처리) (0) | 2026.03.10 |
| String, StringBuffer (0) | 2026.03.10 |
| Object 클래스의 메서드 활용 (0) | 2026.03.09 |
