전편에는 Thread에 대한 개요를 공부했었고 이번 편에서는 Java를 통해서 Thread를 공부해나가 볼까 합니다. 공부 중이기 때문에 틀린 부분있으면 지적 꼭 좀 부탁드립니다. 이 글 또한 도움이 됐으면 좋겠습니다😀
제가 실습한 코드는 혹시 몰라 올려둡니다. https://github.com/helloJosh/nhn-homework-thread-study
1. Thread Counter - 2가지 Main 함수
public class RunnableCounter implements Runnable{
String name;
int count;
int maxCount;
public RunnableCounter(String name, int maxCount){
// 생성자 중략
}
@Override
public void run(){
while(count < maxCount){
try{
Thread.sleep(1000);
count++;
System.out.println(name +":"+count);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
Counter Class 구현 코드
public static void main(String[] args) {
LocalTime now = LocalTime.now();
RunnableCounter counter1 = new RunnableCounter("counter1", 10);
RunnableCounter counter2 = new RunnableCounter("counter2", 10);
System.out.println("start :" + now);
counter1.run();
counter2.run();
System.out.println("end :" + now);
}
public static void main(String[] args) {
LocalTime now = LocalTime.now();
RunnableCounter counter1 = new RunnableCounter("counter1", 10);
RunnableCounter counter2 = new RunnableCounter("counter2", 10);
Thread thread1 = new Thread(counter1);
Thread thread2 = new Thread(counter2);
System.out.println("start :" + now);
thread1.start();
thread2.start();
System.out.println("end :" + now);
}
무슨 차이일까
- 첫번째 메인코드는 Main 쓰레드가 계속 돌면서 Start+시간을 찍고 Counter를 찍고 마지막에 End+시간을 찍는다.
- 두번째 코드는 Main이 아닌 쓰레드가 돌아 Start, End를 찍고 Counter가 찍힌다.
- 즉, Start() 함수는 Linux의 Fork와 같이 쓰레드를 복사하고 할당해준다.
- run()의 경우 CallStack에서 Thread Main만 돌고 있는 것을 알 수 있다.
- start()의 경우 CallStack에서 Main이 아닌 다른 Thread-0 이라는 것을 볼 수 있다.
2. Thread 할당
public static void main(String[] args) {
LocalTime now = LocalTime.now();
RunnableCounter counter1 = new RunnableCounter("counter1", 10);
RunnableCounter counter2 = new RunnableCounter("counter2", 10);
Thread thread1 = new Thread(counter1);
Thread thread2 = new Thread(counter2);
System.out.println("start :" + now);
thread1.start();
thread2.start();
while(thread1.isAlive() || thread2.isAlive())
;
System.out.println("end :" + now);
}
- 위와 같이 Thread를 직접 할당할 수 있고 run()을 사용했던 Main코드와 똑같이 출력을 만들어 낼 수 있다.
'Java > Thread' 카테고리의 다른 글
Synchronization Control - #5 (0) | 2024.07.27 |
---|---|
Thread Synchronization(쓰레드 동기화) - #4 (0) | 2024.07.27 |
Thread Object 관리 - #3 (0) | 2024.07.27 |
Process(프로세스) vs Thread(쓰레드) - #1 (0) | 2024.07.27 |