์ถ์ฒ
ChatGPT
์๋ฐ 8 ์์ค ์ฝ๋
https://cano721.tistory.com/165
์๋ฐ์ Thread.stop() ๋ฉ์๋๋ ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃ์ํค๋ ์ํ ํจ์๋ก deprecated ๋๋ค. stop()์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด interrupt() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
Thread.stop() ์์ค ์ฝ๋ ๋ถ์
Thread.stop()์ ์ค๋ ๋์ ๊ฐ์ ๋ก ThreadDeath ์์ธ๋ฅผ ๋์ ธ ์ข ๋ฃ์ํจ๋ค.
@Deprecated
public final void stop() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
checkAccess();
if (this != Thread.currentThread()) {
security.checkPermission(SecurityConstants.STOP_THREAD_PERMISSION);
}
}
// A zero status value corresponds to "NEW", it can't change to
// not-NEW because we hold the lock.
if (threadStatus != 0) {
resume(); // Wake up thread if it was suspended; no-op otherwise.
// ์ค๋ ๋๊ฐ ์ ์ง ์ํ๋ฉด ์ฌ๊ฐ
}
// The VM can handle all thread states
// ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํตํด ์ค๋ ๋๋ฅผ ์ข
๋ฃ์ํด
stop0(new ThreadDeath());
}
- stop0() ๋ฉ์๋๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ JVM ๋ ๋ฒจ์์ ๊ฐ์ ๋ก ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๋ ๋ช ๋ น์ ์ํํ๋ค.
- ThreadDeath ์์ธ๋ ์ค๋ ๋์ ๋์ ธ์ง๊ณ , ์ด ์์ธ๋ฅผ catchํ์ง ์์ผ๋ฉด ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ค. ์ด ๋ฐฉ์์ ๋งค์ฐ ๊ฐ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ ๋๊ฐ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ ํด์ ํ ๊ธฐํ๋ฅผ ๊ฐ์ง ๋ชปํ๋ค.
๋ฌธ์ ์
- ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์ค๋จ์์ผ(์ค๋ ๋๋ฅผ ๋ฐ๋ก TERMINATED ์ํ๋ก ์ ํ์์ผ) ์ ๊ธ์ด ํด์ ๋์ง ์๊ฑฐ๋ ์์์ด ์ ๋๋ก ํด์ ๋์ง ์์ ์ ์๋ค.
- ์ค๋ ๋๋ฅผ ์ฆ์ ์ข ๋ฃ์ํค๋ฏ๋ก, ์ค๋ ๋๊ฐ ์์์ ์ฌ์ฉํ๊ฑฐ๋ ๊ณต์ ์์์ ๊ฐฑ์ ์ค์ผ ๋ ์ด๋ฅผ ๊ฐ์๊ธฐ ๋ฉ์ถ๋ฉด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์๋ค.
- ์ค๋ ๋๊ฐ ์๊ณ ์์ญ์์ ๊ณต์ ์์์ ์์ ์ค์ด์๋ค๋ฉด, ๊ฐ์์ค๋ฝ๊ฒ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด์ ๋ชจ๋ํฐ ๋ฝ์ด ํด์ ๋์ง ์๊ฑฐ๋ ์์ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ThreadDeath ์์ธ๋ฅผ ๋์ง๊ธฐ ๋๋ฌธ์ ์๊ธฐ์น ์์ ์ํ๋ก ์ข ๋ฃ๋ ์ ์๋ค.
Thread.interrupt() ์์ค ์ฝ๋ ๋ถ์
Thread.interrupt()๋ ์ค๋ ๋์ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ณด๋ด ์ค๋จ ์์ฒญ์ ํ๋ค. ์ด ๋ฉ์๋๋ ์ค๋ ๋๊ฐ ์๋ตํ ์ ์๋๋ก ์ธํฐ๋ฝํธ ์ํ๋ฅผ ์ค์ ํด ๋๋ ์ญํ ์ ํ๋ค.
public void interrupt() {
if (this != Thread.currentThread())
checkAccess(); // ์ ๊ทผ ๊ถํ ๊ฒ์ฌ
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
// ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํตํด ์ธํฐ๋ฝํธ ์คํ
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0(); // ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํตํด ์ธํฐ๋ฐํธ ์ํ ์ค์
}
- interrupt()๋ ์ธํฐ๋ฝํธ ์ํ๋ฅผ ์ค์ ํ๊ฑฐ๋, ํ์ฌ ์ค๋ ๋๊ฐ ์ ๊ฒจ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ํด์ ํ ์ ์๋๋ก ํ๋ค.
- interrrupt0()์ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ก, JVM์์ ์ค๋ ๋์ ์ธํฐ๋ฝํธ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋๋ก ํ๋ค.
- ์ธํฐ๋ฝํธ๊ฐ ํธ์ถ๋ ์ค๋ ๋๋ ์ค์ฌ๋ก ์ธํฐ๋ฝํธ ์ํ๋ฅผ ํ์ธํ๊ณ ํ์ํ ์์ ์ ์ํํ๋ฉฐ ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
์ค๋ ๋ ์ํ์ ๋ฐ๋ฅธ interrupt() ๋์
- ์ค๋ ๋๊ฐ sleep(), wait(), join()๊ณผ ๊ฐ์ ๋๊ธฐ ์ํ(TIMED_WAITING, WAITING)์์ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ฐ์ผ๋ฉด, InterruptedException ์์ธ๊ฐ ๋ฐ์ํ๋ฉฐ, ์ค๋ ๋๋ ๋๊ธฐ ์ํ์์ ๋ฒ์ด๋๊ฒ ๋๋ค. ์ด๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํด ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
- ์ค๋ ๋๊ฐ ์คํ ๊ฐ๋ฅ ์ํ(RUNNABLE)์ ์์ ๋ interrupt()๊ฐ ํธ์ถ๋๋ฉด, ์ค๋ ๋๋ ์ธํฐ๋ฝํธ ํ๋๊ทธ๊ฐ ์ค์ ๋ ๋ฟ ์คํ์ด ์ฆ์ ์ค๋จ๋์ง๋ ์๋๋ค. ํด๋น ์ค๋ ๋ ๋ด์์ Thread.interrupted() ๋ฉ์๋๋ฅผ ํตํด ์ธํฐ๋ฝํธ ํ๋๊ทธ๋ฅผ ํ์ธํ๊ณ , ํ๋๊ทธ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ์ ์ ํ ๋์์ ์ํํ ์ ์๋ค.
interrupt()๋ก ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๊ธฐ
1. ๋ฐ๋ณต๋ฌธ ์์์ isInterrupted()๋ฅผ ํตํด interrupt() ํธ์ถ ์ฌ๋ถ๋ฅผ ํ์ธํด ํ์ถํ๋ค.
2. try-catch๋ฌธ์ ํตํด InterruptedException ๋ฐ์์ ์ก์๋ด์ด try ๋ฌธ์์ ์คํํ๋ ๊ฒ์์ ๋น ์ ธ๋์จ๋ค.
public class InterruptExample extends Thread {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
// ์ค๋ ๋์ ์์
์ํ
System.out.println("Running...");
Thread.sleep(1000); // ์ค๋ ๋๊ฐ ์ ์ ๋ฉ์ถค
} catch (InterruptedException e) {
// ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๊ณ ์ค๋ ๋๋ ๊นจ์ด๋จ
System.out.println("Thread interrupted, stopping...");
break; // ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ์ผ๋ก์จ ์ค๋ ๋๋ฅผ ์ข
๋ฃ
}
}
// ํ์ํ ์ ๋ฆฌ ์์
์ํ
System.out.println("Thread exiting...");
}
public static void main(String[] args) {
InterruptExample thread = new InterruptExample();
thread.start();
try {
Thread.sleep(3000); // ๋ฉ์ธ ์ค๋ ๋ ๋๊ธฐ
} catch (InterruptedException e) {
e.printStackTrace();
}
thread.interrupt(); // ์ค๋ ๋์ ์ธํฐ๋ฝํธ ์์ฒญ
}
}
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฎคํ ์ค Mutex & ์ธ๋งํฌ์ด Semaphore (0) | 2024.10.01 |
---|---|
[Java] volatile ํค์๋ - ๋ณ์์ ๊ฐ์์ฑ, ์ฌ์ ๋ ฌ ๋ฐฉ์ง (0) | 2024.10.01 |
[Java] ์ค๋ ๋ ์๋ช ์ฃผ๊ธฐ (1) | 2024.10.01 |
[์๋ฃ๊ตฌ์กฐ] ํด์ ์ถฉ๋ Hash Collision (1) | 2024.10.01 |
[Java] Retrofit2์์ Annotation์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ดํผ๊ธฐ (1) | 2024.09.23 |