Javaλ₯Ό 곡λΆνλ©΄μ ThreadλΌλ κ°λ μ μ νμλλ κ΅μ₯ν λ―μ€κ³ μ²μμ΄λΌμ μ΄μν μ©μ΄λ€μ΄ κ΅μ₯ν λ§μμ΅λλ€. μ κ° 7μ΄λ μ²μ μ»΄ν¨ν°λ₯Ό ꡬμ ν΄μ μ¬μ©νμΌλ 20λ κ°κΉμ΄ PCλ₯Ό μ¨μ€λ©΄μ κ·Έλλ μ§κΈ μμλ³Ό λκ°μ λ¨μ΄λ λ§μ΄ λ£μ§ μμλ μκ°μ΄ λλλ€.
μμμ νλ‘μΈμ€λ νλ‘κ·Έλ¨μ μννλ λ° νμν λ°μ΄ν°μ λ©λͺ¨λ¦¬ λ±μ μμ, κ·Έλ¦¬κ³ μ°λ λλ‘ κ΅¬μ±λμ΄ μλ€κ³ μμ 보μμ΅λλ€.
λͺ¨λ νλ‘μΈμ€μλ μ΅μν νλ μ΄μμ μ°λ λκ° μ‘΄μ¬νλ©°, λ μ΄μμ μ°λ λλ₯Ό κ°μ§ νλ‘μΈμ€λ₯Ό 'λ©ν° μ°λ λ νλ‘μΈμ€' λΌκ³ ν©λλ€.
νλ‘μΈμ€ = 곡μ₯, μ°λ λ = μΌκΎΌμΌλ‘ μκ°νλ©΄ μ±κΈ μ°λ λμ λ©ν° μ°λ λλ₯Ό μ΄ν΄νκΈ° μ½μ΅λλ€. ν 곡μ₯μ μΌκΎΌμ΄ νλͺ μ΄λΌλ©΄ μ±κΈ μ°λ λμ΄κ³ , ν 곡μ₯μ μΌκΎΌμ΄ μ¬λΏμ΄λΌλ©΄(2λͺ μ΄μ) λ©ν° μ°λ λ μ λλ€.
β νλμ νλ‘μΈμ€κ° κ°μ§ μ μλ μ°λ λμ μλ μ νλμ΄ μμ§ μμ§λ§, μ°λ λκ° μμ μ μννλλ° κ°λ³μ μΈ λ©λͺ¨λ¦¬ 곡κ°(νΈμΆμ€ν)μ νμλ‘ νκΈ° λλ¬Έμ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ νκ³μ λ°λΌ μμ±ν μ μλ μ°λ λμ μκ° κ²°μ λ©λλ€.
μ λ λ³΄ν΅ PCλ₯Ό ν€κ±°λ μμ
μ νλ©΄, Chrome & IDE & DBλ± λ§μ Toolλ€μ λμμ μ€νμν€κ³ μ¬μ©ν©λλ€. μ΄κ²μ΄ κ°λ₯ν μ΄μ λ 무μμΌκΉμ?
μλμ°μ μ λμ€λ₯Ό ν¬ν¨ν λλΆλΆμ OSλ λ©ν°νμ€νΉμ μ§μνκΈ° λλ¬Έμ
λλ€.
μ μ°λ λλ₯Ό μ€λͺ νλ©΄μ λ©ν° νμ€νΉμ λν΄μ μΈκΈνμκΉμ? λμΉ μ±μ ¨λμ?
μ λμΉ λͺ»μ±λ©΄ κ·Έλ§μ΄μΌ π
μ΄μ λ§μ°¬κ°μ§λ‘ λ©ν°μ°λ λ©μ νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ μ°λ λκ° λμμ μμ μ μννλ κ²μ λλ€. CPUμ μ½μ΄λ ν λ²μ λ¨ νλμ μμ λ§ μνν μ μμ΅λλ€.
μ€μ λ‘ λμμ μ²λ¦¬λλ μμ μ κ°μλ μ½μ΄μ κ°μμ μΌμΉν©λλ€. κ·Έλμ CPUμ μ½μ΄μκ° λ§μ κ²μ μ ννκ² λλ κ²μ΄μ£ . μ°λ λμ μλ μΈμ λ μ½μ΄μ κ°μλ³΄λ€ ν¨μ¬ λ§κΈ° λλ¬Έμ κ° μ½μ΄κ° μμ£Ό 짧μ μκ° λμ μ¬λ¬ μμ μ λ²κ°μ κ°λ©° μννμ¬ μ¬λ¬ μμ λ€μ΄ λͺ¨λ λμμ μνλλ κ²μ²λΌ 보μ΄κ² ν©λλ€.
λμ€μ κ°μ΄ ν λ²μ νκ°μ§ μμ
λ§ ν μ μλ OSμ μλμ°μ κ°μ΄ λ©ν°νμ€νΉμ΄ κ°λ₯ν OSμ μ°¨μ΄λ μ΄λ―Έ κ²½νμΌλ‘ μ μκ³ μμΌμ€κ±°λΌ μκ°ν©λλ€.
μ λμ€ μμ¨λ΄μ λͺ°λΌμ μμ κ±°λ μ
λ©ν°μ°λ λ©μ μ₯μ μ λμ΄νλ€λ©΄ μλμ κ°μ κ² κ°μ΅λλ€.
λ§μ½μ μΉκ΅¬μ μΉ΄μΉ΄μ€ν‘μ νλλ° μΉκ΅¬κ° μ¬μ§μ μ μ‘νλ λμ μ±ν μ νμ§ λͺ»νκ³ λ©μΆ°μΌ νλ€λ©΄ μ무λ μΉ΄μΉ΄μ€ν‘μ μ¬μ©νμ§ μκ² μ£ ?
μ°λ¦¬κ° μΉ΄μΉ΄μ€ν‘μ νλ©°, μ¬μ§μ 보λ΄κ³ νμΌμ λ€μ΄λ‘λ λ°λ λμμλ μΉκ΅¬μ μ§μμ μΌλ‘ μ±ν μ ν μ μμλ λΉλ°μ μ±ν μ ν리μΌμ΄μ μ λ©ν°μ°λ λλ‘ μμ±λμ΄ μκΈ° λλ¬Έμ λλ€.
μ¬λ¬ μ¬μ©μμκ² μλΉμ€λ₯Ό ν΄μ£Όλ μλ² νλ‘κ·Έλ¨μ κ²½μ° λ©ν°μ°λ λλ‘ μμ±νλ κ²μ μ νμ΄ μλ νμλΌκ³ λ΄μΌ ν λ§νΌ λ©ν°μ°λ λλ μ°λ¦¬μκ² λ§μ νΈλ¦¬ν¨μ μ 곡ν΄μμ΅λλ€.
μ±κΈμ°λ λμ κ²½μ° μ¬μ©μμ μμ²λ§λ€ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±ν΄μΌ νλ κ²μ΄ κ°μ₯ ν° λ¨μ μ λλ€. νλ‘μΈμ€λ₯Ό μμ±νλ κ²μ΄ μ°λ λλ₯Ό μμ±νλ κ²μ λΉν΄ λ λ§μ μκ°κ³Ό λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνκΈ° λλ¬Έμ λλ€.
πΈ μ°λ λλ₯Ό κ°λ²Όμ΄ νλ‘μΈμ€, μ¦ κ²½λ νλ‘μΈμ€λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
λ©ν°μ°λ λκ° μ₯μ λ§ μλ μ¬λμ€λ¬μ΄ μ‘΄μ¬λΌλ©΄, μ±κΈμ°λ λ κ°λ μ μ°λ¦¬κ° μμ§ λͺ»ν΄λ λ¬μ κ²μ λλ€. νμ§λ§ λ©ν°μ°λ λλ μ¬λ¬ μ°λ λκ° κ°μ νλ‘μΈμ€ λ΄μμ μμμ 곡μ νλ©° μμ μ μννκΈ° λλ¬Έμ λκΈ°νμ κ΅μ°©μν κ°μ λ¬Έμ λ€μ΄ μμ΅λλ€.
μ΄ λΆλΆμ κ½€λ μ€μνκΈ° λλ¬Έμ μΆνμ λ°λ‘ ν¬μ€ν νμ¬ μμλ³΄κ² μ΅λλ€.
Javaμμ μ°λ λλ₯Ό ꡬννλ λ°©λ²μ λ κ°μ§κ° μμ΅λλ€.
Thread ν΄λμ€λ₯Ό μμλ°λ λ°©λ²κ³Ό, Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²μ΄ μλλ°μ.
μ΄λ μͺ½μ μ νν΄λ λ³ μ°¨μ΄λ μκ² μ§λ§, Javaλ λ€μ€ μμμ μ§μνμ§ μμΌλ―λ‘ Thread ν΄λμ€λ₯Ό μμ λ°μΌλ©΄ λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ§ λͺ»νκ² λ©λλ€.
λ°λΌμ Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²μ΄ μΌλ°μ μ λλ€.
// Thread ν΄λμ€λ₯Ό μμλ°λ λ°©λ²
class MyThread extends Thread {
@Override
public void run() { /* μ μ
λ΄ μ© */ } // Thread ν΄λμ€μ run()μ μ€λ²λΌμ΄λ©
}
// Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²
class MyThread implements Runnable {
@Override
public void run() { /* μ μ
λ΄ μ© */ } // Runnable μΈν°νμ΄μ€μ run()μ ꡬν
}
Runnable μΈν°νμ΄μ€μ μμ€λ₯Ό 보면 μ€λ‘μ§ run( )λ§ μ μλμ΄ μλ κ°λ¨ν μΈν°νμ΄μ€ μ λλ€. Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²μ κ°λ¨ν©λλ€.
μΆμλ©μλμΈ run( )μ λͺΈν΅{ }μ λ§λ€μ΄ μ£ΌκΈ°λ§ νλ©΄ ꡬνμ ν μ μμ΅λλ€.
// Runnable μΈν°νμ΄μ€μ μμ€
public interface Runnable {
public abstract void run();
}
κ·Έλ λ€λ©΄ Thread ν΄λμ€λ₯Ό μμλ°λ λ°©λ²κ³Ό Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²μΌλ‘ Threadλ₯Ό ꡬννκ³ μ€ννλ μμ λ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€.
// Thread ꡬν & μ€ν μμ
public class ThreadEx1 {
public static void main(String[] args) {
ThreadEx1_1 t1 = new ThreadEx1_1();
Runnable r = new ThreadEx1_2();
Thread t2 = new Thread(r); // μμ±μ Thread(Runnable target)
t1.start();
t2.start();
}
}
/*
Thread ν΄λμ€λ₯Ό μμ
*/
class ThreadEx1_1 extends Thread {
@Override
public void run() {
for(int i=0; i<5; i++){
System.out.println(getName());
}
}
}
/*
Runnable μΈν°νμ΄μ€λ₯Ό ꡬν
*/
class ThreadEx1_2 implements Runnable {
@Override
public void run() {
for(int i=0; i<5; i++){
// Thread.currentThread() - νμ¬ μ€νμ€μΈ Threadλ₯Ό λ°ννλ€.
System.out.println(Thread.currentThread().getName());
}
}
}
μμ μμ λ₯Ό 보면 Thread ν΄λμ€λ₯Ό μμλ°μ κ²½μ°μ Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν κ²½μ°μ μΈμ€ν΄μ€ μμ± λ°©λ²μ΄ λ€λ¦ λλ€.
ThreadEx_1 t1 = new ThreadEx1_1(); // Threadμ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±
Runnable r = new ThreadEx1_2(); // Runnableμ ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±
Thread t2 = new Thread(r); // μμ±μ Thread(Runnable target)
// μμ μ½λ λμ€μ κ°λ¨ν νμ€λ‘ νκΈ°
Thread t2 = new Thread(new ThreadEx1_2());
Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν κ²½μ°μ, Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν λ€μ, μ΄ μΈμ€ν΄μ€λ₯Ό Thread ν΄λμ€μ μμ±μμ 맀κ°λ³μλ‘ μ 곡ν΄μΌ ν©λλ€.
public class Thread {
...
private Runnable target; // Runnableμ ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκΈ° μν λ³μ
// Threadμ μμ±μ
public Thread(Runnable target) {
this(null, target, "Thread-" + nextThreadNum(), 0);
}
// run()μ μ€λ²λΌμ΄λ©
// Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ run()μ νΈμΆ
@Override
public void run() {
if (target != null) {
target.run();
}
}
}
μμ μμ μ½λλ μ€μ Thread ν΄λμ€μ μμ€μ½λ μ€ μΌλΆ μ λλ€. μ΄ μ½λλ₯Ό 보면 run( )μ νΈμΆνλ©΄ μ°Έμ‘°λ³μ rμ ν΅ν΄μ Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν μΈμ€ν΄μ€μ run( )μ΄ νΈμΆλ©λλ€. λ°λΌμ μμμ ν΅ν΄ run( )μ μ€λ²λΌμ΄λ©νμ§ μκ³ λ μΈλΆλ‘λΆν° run( )μ μ 곡λ°μ μ μλ κ²μ λλ€.
Thread ν΄λμ€λ₯Ό μμλ°μΌλ©΄ μμ ν΄λμ€μμ μ‘°μμΈ Thread ν΄λμ€μ λ©μλλ₯Ό μ§μ νΈμΆν μ μμ΅λλ€. νμ§λ§ Runnableμ ꡬννλ©΄ Thread ν΄λμ€μ λ©μλμ μ§μ μ κ·Όν μ μμ£ .
κ·Έλ¬λ©΄.. Runnable μ°λ©΄ μλλ κ±° μλκ°μ?
λΉμ°ν Runnableμ μΌλ°μ μΌλ‘ μ¬μ©νλ€κ³ λ§μλλ ΈμΌλ ν΄κ²°λ°©λ²μ μμ΅λλ€.
μ μ΄κ·Έλ‘μ’ μ λ° κ·Έλ§ π€£π€
Thread ν΄λμ€μ static λ©μλμΈ currentThread( )λ₯Ό νΈμΆνμ¬ μ°λ λμ λν μ°Έμ‘°λ₯Ό μ»μ΄μ νΈμΆμ΄ κ°λ₯ν΄μ§λλ€.
// Threadλ₯Ό μμλ°μ ν΄λμ€μμμ λ©μλ μ¬μ©
System.out.println(getName());
// Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μμμ λ©μλ μ¬μ©
System.out.println(Thread.currentThread().getName());
μμ μμ μ½λμ²λΌ Thread ν΄λμ€λ₯Ό μμλ°μ μμ ν΄λμ€μμλ λ©μλμ μ΄λ¦μΌλ‘ λ©μλ νΈμΆμ΄ κ°λ₯νλ€λ©΄, Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μμλ Thread ν΄λμ€μ static λ©μλμΈ currentThread( ) λ©μλλ‘ Threadμ μ°Έμ‘°λ₯Ό μ»μ λ€ νΈμΆμ΄ κ°λ₯ν©λλ€.
μ€λμ μ
λ¬΄κ° λ§μμ μ¬κΈ°κΉμ§..
곧 λμμ¬κ²μ To Be Continue..