프로세스 안에서 실질적으로 작업을 실행하는 단위
✔️ 프로세스 : CPU에 의해 메모리에 올라가 실행 중인 프로그램
하나의 프로세스 안에 여러 개의 스레드가 동시에 작업을 수행하는 것
public class MyThread implements Runnable {
@Override
public void run() {
// 수행 코드
}
}
public class MyThread extends Thread {
@Override
public void run() {
// 수행 코드
}
}
Runnable 상태 : 스레드가 실행되기위한 준비 단계
Running 상태 : 스케줄러에 의해 선택된 스레드가 실행되는 단계
Blocked 상태 : 스레드가 작업을 완수하지 못하고 잠시 작업을 멈추는 단계
public static void main(String[] args) {
Runnable r = new MyThread();
Thread t = new Thread(r, "mythread");
}
public class ThreadTest implements Runnable {
public ThreadTest() {}
public ThreadTest(String name){
Thread t = new Thread(this, name);
t.start();
}
@Override
public void run() {
for(int i = 0; i <= 50; i++) {
System.out.print(i + ":" + Thread.currentThread().getName() + " ");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
run() 호출이 아닌 start() 호출로 해야함
start()는 스레드가 작업을 실행하는데 필요한 콜 스택을 생성한 다음 run()을 호출해서 그 스택 안에 run()을 저장할 수 있도록 해줌
sleep(), join(), yield(), interrupt()
여러 스레드가 동일한 리소스를 공유하여 사용하게 되면 서로의 결과에 영향을 주기 때문에 이를 방지하는 기법
➡️ 임계 영역(critical section)과 잠금(lock) 활용
synchronized 활용하여 임계영역 설정
[참고 자료]