Error
: program이 지속될 수 없는 오류 ❌Exception
: 해결이 가능한 오류 ⭕프로그램을 실행하다가 프로그램이 정상적인 수행이 안되면(exception이 발생할 수 있는 상황에 처하면)
→ JVM이 현재 오류실행에 대한 정보를 모아 instance를 생성
→ 이 객체를 우리가 프로그램적으로 처리
Process
“실행중인 프로그램”
프로그램을 실행시키기 위해 OS로부터 resource를 할당받아야 해요.
최소 1개 이상의 thread가 존재
Process = resource + thread
resource
thread
CPU(core → 한 순간에 한가지 일만 수행)
만약 single core를 가정하면 여러 프로그램이 마치 동시에 실행되는 것처럼 보인다.(Excel, powerpoint, game, music, …)
→ time sliding(시분할) ⇒ Multitasking(멀티태스킹)
multiprocessing → core가 2개 이상일 때를 의미
multi-threading
Java에 Thread를 만들어 사용하려면 어떻게 해야하나요?
method ≠ thread. method는 thread가 아니다.
thread는 실행 흐름. thread가 method를 호출한다.
Java에서는 thread 자체가 instance임. → Java에서 thread를 만드는 class가 존재한다. ⇒ “Thread class”
💡 Java에서 thread를 생성하는 법
1. 🌟 [직접 상속] Thread class를 상속해서 User define thread class를 만들어서 이용한다.
- 단일 상속에 대한 문제, tightly coupled 문제가 있다.
2. 🌟 [간접 상속] Runnable interface를 구현하고 User define class를 작성한다. → instance를 만들어new Thread(instance)
Thread의 상태전이도
Process의 종료
내부에서 파생된 모든 User define thread가 종료되는 순간 process가 종료된다.
Thread 우선순위 할당
// thread에 우선순위 할당 -> single core에서만 의미가 있다.
// multi-core 환경에서는 우선순위의 의미가 없다.
t1.setPriority(10);
t2.setPriority(2);
Daemon Thread(데몬 스레드)
⇒ Garbage collection, 자동저장 기능
데몬 스레드 만들기 → t1.setDaemon(true)
기억해야하는 thread의 method
sleep(long millisecond)
→ 일정시간동안 thread를 중지시킨다.
sleep에 들어가면 쿨쿨잔다.
interrupt()
가 호출되면 InterruptedException 발생하면서 sleep에서 깨어난다. → 항상 “try ~ catch”상태전이도(sleep)
interruput()
🧐 Thread 실행 후 작업이 끝나기 전에 해당 Thread를 중지시키고 싶어요!
→ Thread 내부 상태값인 “Interrupted state” 를 변경해요 ~~
Thread가 interrupt가 되었는지 확인하는 방법
interrupted()
→ Thread의 static ⇒ 현재 수행중인 Thread가 interrupt가 걸렸는지 여부isInterttupted()
→ static이 아니에요 ⇒ 특정 thread가 interrupt 걸렸는지 여부Thread
stop()
: Thread의 (강제)종료suspend()
: Thread의 일시중지resume()
: 일시중지된 Thread의 재시작yield()
: Thread가 자신에게 주어진 실행시간을 다 쓰지않고 다른 Thread에게 양보💡
volatile
keyword
ThreadExam06.java 참고