January 10, 2021
public class SingleThreadTest{
public static void main(String[] args){
for(int i = 0; i < 10; i++){
String threadName = Thread.currentThread().getName();
System.out.println(threadName + " : " + i);
}
}
}
java.lang 패키지에는 Thread 기능을 구현하는데 이용되는 Thread라는 클래스가 제공된다.
주요 메소드
static void sleep(long msec) throws InterruptedException
: msec에 지정된 millisecond 동안 Thread를 대기한다.void start()
: Thread를 시작하게 한다.void join()
throws InterruptedException: Thread가 끝날 때까지 대기한다.void run()
: Thread 기능을 실행static void yield()
: 현재 실행 중인 Thread를 잠시 멈추어 다른 Thread가 실행될 여지를 준다.Thread 클래스를 활용해서 Thread 프로그램을 작성하는 절차
특정 기능을 수행하는 Thread 클래스 작성
class MyThread extends Thread{
//Thread 변수 선언
//run()메소드 Overriding
public void run(){
//Thread 기능 구현
}
}
Thread 클래스로부터 객체를 생성하고 생성된 Thread 객체를 실행한다.
//Thread 클래스에 대한 객체 생성
MyThread thread = new MyThread();
//Thread 실행
thread.start();
Thread 객체 특징
Runnable 인터페이스를 활용해서 Thread 프로그램을 작성하는 절차
Runnable 인터페이스의 경우 Thread의 수행 코드인 run()메소드를 가지고 있어서 내부적으로는 Thread 객체를 생성해서 수행하도록 되어있다.
필요한 Thread 기능을 수행하는 클래스 작성
class MyThread implements Runnable{
//run()메소드 구현
public void run(){
//Thread 기능 작성
}
}
Thread 클래스로부터 객체를 생성하고 생성된 Thread 객체를 실행
//MyThread 객체를 생성한다.
MyThread runnable = new MyThread();
//위의 생성된 객체를 인자로 Thread 클래스를 생성한다.
Thread thread = new Thread(runnable);
//Thread 실행
thread.start()
스케줄러는 JVM 안에서 수행되는 특별한 Thread라고 생각할 수 있다. 스케줄러는 실행 상태에 있는 Thread가 CPU를 반납할 경우 여러 상황을 고려하여 다음에 수행될 Thread 후보를 선택한다.
수행 불가능한 상태로 이동시키는 Thread 클래스의 메소드
sleep()
wait()(notify(), notifyAll())
join()
yield()
run()
run()메소드를 모두 수행하기 전에 Thread를 종료할 수 있는 방법은?
Thread 클래스 멤버
작성하는 응용 프로그램들은 많은 경우에 다수 개의 Thread가 어떤 연관관계를 가지고 동작하게 된다.
임계 영역
synchronized
예약어synchronized
예약어를 통해 동기화 처리가 가능하다.두 개 이상의 Thread가 서로 협력하며 공유 자원을 사용하도록 하는 것