스레드 (Thread)
스레드와 멀티스레딩
- 스레드 : JVM에 의해 스케쥴되는 실행 단위의 코드 블럭
- 자바의 멀티태스킹 : 멀티스레딩, 응용프로그램 > 스레드가 한개 이상 구성되어 있음
- 멀티스레딩 효과 : 시간 지연을 줄임

[멀티스레딩 예시 코드]
class ThreadEx1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("i: "+i);
}
}
}
public class ThreadEx {
public static void main(String[] args) {
ThreadEx1 t1 = new ThreadEx1();
// Thread t2 = new Thread(new ThreadEx2());
Runnable r = new ThreadEx2();
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class ThreadEx2 implements Runnable {
@Override
public void run() {
for (int j = 10; j < 15; j++) {
System.out.println("j: "+j);
}
}
}
// 실행할때 마다 결과가 다르게 나옴
- 자바 스레드와 JVM

- 스레드 만들기 주의사항 : run() 메소드가 종료하면 스레드는 종료 한번 종료한 스레드는 다시 시작시킬 수 없음
- java.lang.Thread 클래스
- 스레드 클래스 작성
- 스레드 코드 작성 : run() 메소드 오버라이딩
- 스레드 객체 생성
- 스레드 시작 : start() 메소드 호출
TimerThread th = new TimerThread(); // 객체 생성 방법
-
public class TimerThread extends Thread{ int n=0; @Override public void run() { while (true) { System.out.println(n); n++; try { sleep(1000); // 시간 지연 ms 단위 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class TestThread { public static void main(String[] args) { TimerThread th = new TimerThread(); th.start(); } }
- java.lang.Runnable 인터페이스
- 스레드 클래스 작성
- 스레드 코드 작성 : run() 메소드 구현
- 스레드 객체 생성
- 스레드 시작 : start() 메소드 호출
Thread th = new Thread(new TimerRunnable()); // 객체 생성 방법
-
public class TimerRunnable implements Runnable{ int n=0; @Override public void run() { while (true) { System.out.println(n); n++; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class TestRunnable { public static void main(String[] args) { Thread th = new Thread(new TimerRunnable()); th.start(); } }
스레드 상태
- 스레드 주요 정보

public class ThreadMainEx {
public static void main(String[] args) {
long id = Thread.currentThread().getId();
String name = Thread.currentThread().getName();
int priority = Thread.currentThread().getPriority();
Thread.State s = Thread.currentThread().getState();
System.out.println("현재 쓰레드 ID = "+id);
System.out.println("현재 쓰레드 이름 = "+name);
System.out.println("현재 쓰레드 우선순위 값 = "+priority);
System.out.println("현재 쓰레드 상태 = "+s);
}
}
- 스레드 우선순위
- 10이 최상위 우선순위
- setPriority(int priority)/getPriority() 메소드 사용
- main()을 실행시 main 스레드가 생성되어 실행
- 스레드 상태
- NEW : 생성
- RUNNABLE : 실행
- WATING : wait() 호출
- TIMED_WATING : sleep(n) 호출
- BLOCK : I/O 작업을 요청하면 JVM이 자동으로 BLOCK 상태로 만듬
- TERMINATED : 종료

notify() : 일시 정지 상태에 있는 다른 스레드를 실행 대기 상태로 만듬
notifyAll() : 대기중인 스레드 모두 작동
'java,jsp,spring > java' 카테고리의 다른 글
java 네트워크 (0) | 2022.08.08 |
---|---|
java 입,출력 스트림 (0) | 2022.08.06 |
java 제네릭, 컬렉션 (0) | 2022.08.03 |
java 기타 클래스 (0) | 2022.08.01 |
java 스레드, 메모리 사용 영역 (1) | 2022.08.01 |