π Java μ Thread(μ€λ λ)
μ€λ λλ μλ λ μμ±μ μν΄ μλ°μμ 미리 ꡬνν΄λ ν΄λμ€μ΄λ€.
Process(νλ‘μΈμ€)
μ€ν μ€μΈ νλ‘κ·Έλ¨. μ¦, μ¬μ©μκ° μμ±ν νλ‘κ·Έλ¨μ΄ μ΄μ체μ μ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉλ°μ μ€ν μ€μΈ κ²μ λ§ν©λλ€. μ΄λ¬ν νλ‘μΈμλ νλ‘κ·Έλ¨μ μ¬μ©λλ λ°μ΄ν°μ λ©λͺ¨λ¦¬ λ±μ μμ κ·Έλ¦¬κ³ μ€λ λλ‘ κ΅¬μ±λ©λλ€.
Thread(μ€λ λ)
νλ‘μΈμ€ λ΄μμ μ€μ λ‘ μμ
μ μννλ 주체λ₯Ό μλ―Έν©λλ€. λͺ¨λ νλ‘μΈμ€μλ ν κ° μ΄μμ μ€λ λκ° μ‘΄μ¬νμ¬ μμ
μ μνν©λλ€. λν, λ κ° μ΄μμ μ€λ λλ₯Ό κ°μ§λ νλ‘μΈμ€λ₯Ό λ©ν°μ€λ λ νλ‘μΈμ€(multi-threaded process) λΌκ³ ν©λλ€.
Multi-Threaded(λ©ν°μ€λ λ)
λ κ°μ§ μ΄μμ μ€λ λλ₯Ό κ°μ§λ©°, μλ°μμλ λ©ν° νλ‘μΈμ νλμ¨μ΄λ₯Ό μ§μνλλ‘ μ€κ³ λμμΌλ―λ‘ λ©ν° CPU μμ€ν
μμ λμ ν¨μ¨μ λΌ μ μμ΅λλ€.
Thread λ©μλ
sleep
νμ¬ μ€λ λ λ©μΆκΈ°
μμμ ν λΉν μνλ‘ μ μ΄κΆμ λ겨주λ―λ‘ λ°λλ½μ΄ λ°μν μ μμ΅λλ€.
interupt
λ€λ₯Έ μ€λ λλ₯Ό κΉ¨μμ interruptedException μ λ°μμν΅λλ€.
interupt κ° λ°μν μ€λ λλ μμΈλ₯Ό catch νμ¬ λ€λ₯Έ μμ
μ ν μ μμ΅λλ€.
join
λ€λ₯Έ μ€λ λμ μμ
μ΄ λλ λκΉμ§ κΈ°λ€λ¦¬κ² ν©λλ€.
μ€λ λμ μμλ₯Ό μ μ΄ν λ μ¬μ©ν μ μμ΅λλ€.
π Thread(μ€λ λ) ꡬν λ°©λ²
Thread ν΄λμ€λ‘ μ€λ λλ₯Ό ꡬννκΈ° μν΄μλ μ΄λ₯Ό μμλ°λ ν΄λμ€λ₯Ό λ§λ€κ³ , λ΄λΆμμ run λ©μλλ₯Ό ꡬνν΄μΌ ν©λλ€. κ·Έλ¦¬κ³ μ€λ λμ start λ©μλλ₯Ό νΈμΆνλ©΄ run λ©μλκ° μ€νλ©λλ€.
// Thread.java
public class Thread {
public static void main(String[] args) {
// νλμ νλ‘μΈμ€
// λ€λ₯Έ ν΄λμ€μ μ€λ λ
CleanThread cleanThread = new CleanThread(); // μ€λ λ κ°μ²΄ μμ±
// cleanThread.run(); // μ£Όμ: run λ©μλ νΈμΆ μ μΌλ°μ μΈ λ©μλ νΈμΆ
cleanThread.start(); // μ€λ λ μ€ν
// main
cleanByBoss(); // μ¬μ₯λ μ²μ
}
public static void cleanByBoss() {
System.out.println("-- μ¬μ₯ μ²μ μμ --");
for (int i = 1; i <= 10; i += 2){
System.out.println("(μ¬μ₯) " + i + "λ²λ°© μ²μ μ€");
}
System.out.println("-- μ¬μ₯ μ²μ λ --");
}
}
// CleanThread.java
public class CleanThread extends Thread{ // μ€λ λ ν΄λμ€ μμ
public void run() { // Run λ©μλ ꡬν
System.out.println("-- μ§μ μ²μ μμ (Thread) --");
for (int i = 2; i <= 10; i += 2) {
System.out.println("(μ§μ) " + i + "λ²λ°© μ²μ μ€ (Thread)");
}
System.out.println("-- μ§μ μ²μ λ (Thread) --");
}
}
23. 3. 8. Runnable μΆκ°
π Java μ Runnable
Runnable μΈν°νμ΄μ€λ 1κ°μ λ©μλ λ§μ κ°λ ν¨μν μΈν°νμ΄μ€μ
λλ€.
π Runnable ꡬν λ°©λ²
// CleanRunnable.java
public class CleanRunnable implements Runnable { // implements Runnable μΆκ°
@Override
public void run() { // Run λ©μλ ꡬμ±
System.out.println("-- μ§μ μ²μ μμ (Runnable) --");
for (int i = 2; i <= 10; i += 2) {
System.out.println("(μ§μ) " + i + "λ²λ°© μ²μ μ€ (Runnable)");
}
System.out.println("-- μ§μ μ²μ λ (Runnable) --");
}
}
// Runnable.java
public class Runnable {
public static void main(String[] args) {
// Runnable μΈν°νμ΄μ€
CleanRunnable cleanRunnable = new CleanRunnable(); // ν΄λμ€ κ°μ²΄ μμ±
Thread thread = new Thread(cleanRunnable); // μ€λ λ κ°μ²΄ μμ± μμ±μ cleanRunnable μΆκ°
thread.start(); // μ€λ λ μ€ν
cleanByBoss();
}
public static void cleanByBoss() {
System.out.println("-- μ¬μ₯ μ²μ μμ --");
for (int i = 1; i <= 10; i += 2){
System.out.println("(μ¬μ₯) " + i + "λ²λ°© μ²μ μ€");
}
System.out.println("-- μ¬μ₯ μ²μ λ --");
}
}
π Thread μ Runnable λΉκ΅
Runnable μ μ΅λͺ
κ°μ²΄λ‘ μ¬μ© κ°λ₯νμ§λ§, Thread λ λ³λ ν΄λμ€λ₯Ό λ§λ€μ΄μΌ νλ€λ μ μμ λ²κ±°λ‘μ΅λλ€. λν Java μμλ λ€μ€ μμμ΄ λΆκ°λ₯νκΈ° λλ¬Έμ Thread ν΄λμ€λ₯Ό μμ λ°μΌλ©΄ λ€λ₯Έ ν΄λμ€λ₯Ό μμ λ°μ μ μμ΅λλ€.
Thread ν΄λμ€λ₯Ό μμ λ°μΌλ©΄ Thread ν΄λμ€μ ꡬνλ μ½λλ€μ μν΄ λ λ§μ μμ(λ©λͺ¨λ¦¬μ μκ° λ±)μ νμλ‘ νλ―λ‘ Runnable μ΄ μ£Όλ‘ μ¬μ©λ©λλ€.
Thread μ Runnable μ μ€λ λλ€μ κ΄λ¦¬νκΈ° μ΄λ ΅μ΅λλ€. κ·Έλμ Java μμλ κΎΈμ€ν λ°μ μΌλ‘ μ€λ λλ₯Ό μ¬μ©νλ λ°©λ²λ€μ λ§λ€μκ³ , Java5 μ λ±μ₯νλ Executor, ExecutorService, ScheduledExecutionServiceμ Callable, Future κ° μμ΅λλ€.
μΆμ² | λ§λλκ°λ°μ
μΆμ² | TCP School