728x90
반응형
Thread
하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다.
CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 CPU의 실행 단위는 쓰레드입니다.
즉 쓰레드가 CPU를 차지하면 프로세스가 수행됩니다.
쓰레드는 각자의 작업공간인 Context 값을 가집니다.
각 쓰레드들이 공유해서 사용하는 Shared Resource가 있습니다.
각 쓰레드들이 동시에 Shared Resource에 접근할 때 문제가 생길 수 있습니다.
그래서 공유 자원은 임계영역(critical section) 이라고 하는데 이 영역을 한 쓰레드가 사용할 때 다른 쓰레드는 못쓰게 합니다.
이를 동기화라고 합니다. 자바에서는 syncronized, syncronizedBlock이 있다.
쓰레드 상태
- Runnable: 언제든지 CPU가 할당되면 수행될 수 있는 상태
- Run: CPU가 할당된 상태
- Not Runnable: 쓰레드가 잠깐 쉬는 상태
- sleep(time) -> time이 끝나면 다시 Runnable 상태로 돌아옵니다.
- wait() -> notify() 메서드를 호출하면 다시 Runnable 상태로 돌아옵니다.
- join() -> 다른 쓰레드의 결과가 필요한 쓰레드일 경우 기다리고 쓰레드의 결과가 반환되면 다시 Runnable 상태로 돌아옵니다.
자바에서 쓰레드 구현
package Java.thread;
//extends Thread를 해도 되지만 자바 클래스는
//다중상속이 안되기 때문에 인터페이스 Runnable을 상속할 수 있습니다.
class MyThread implements Runnable{
//run() 함수는 Thread.start()를 했을 때 실행되는 행동을 정의합니다.
@Override
public void run(){
for (int i = 1; i < 201; i++) {
System.out.print(i + "\t");
}
}
}
public class ThreadTest {
public static void main(String[] args) {
System.out.println(Thread.currentThread() + "start");
MyThread runnable = new MyThread();
Thread th1 = new Thread(runnable);
Thread th2 = new Thread(runnable);
th1.start();
th2.start();
System.out.println(Thread.currentThread() + "end");
//간단하게 아래와 같이 쓰레드를 생성할 수도 있습니다.
Runnable simpleThread = new Runnable() {
@Override
public void run() {
System.out.println("running Thread");
}
};
simpleThread.run();
}
}
결과
Thread[main,5,main]start
Thread[main,5,main]end
running Thread
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 200 200
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] Thread Method : join() (0) | 2022.07.29 |
---|---|
[Java] Priority Thread (0) | 2022.07.29 |
[Java] Decorator Pattern (0) | 2022.07.28 |
[Java] Template Method Pattern (0) | 2022.07.28 |
[Java] Singleton Pattern (0) | 2022.07.28 |