μ€λ λλ?
νλ‘μΈμ€λ μ€ν μ€μΈ μ ν리μΌμ΄μ μ μλ―Ένλ©° νλ‘μΈμ€ λ΄μμ μ€νλλ μμ€ μ½λμ μ€ν νλ¦μ μ€λ λλΌκ³ νλ€. νλμ μ€λ λλ₯Ό κ°μ§λ νλ‘μΈμ€λ₯Ό μ±κΈ μ€λ λ νλ‘μΈμ€, μ¬λ¬ κ°μ μ€λ λλ₯Ό κ°μ§λ νλ‘μΈμ€λ₯Ό λ©ν° μ€λ λ νλ‘μΈμ€λΌκ³ λΆλ₯Έλ€.
μλ°λ₯Ό μ€ννλ©΄ κ°μ₯ λ¨Όμ μ€νλλ λ©μλλ main
μ΄λ©°, λ©μΈ μ€λ λκ° main
λ©μλλ₯Ό μ€νμν¨λ€.
μ€λ λλ₯Ό μμ±νλ 2κ°μ§ λ°©λ²
μ€λ λκ° μ€νν μ½λλ run()
λ©μλ λ΄μ μμ±ν΄μΌ νλ©° run()
λ©μλλ Runnable μΈν°νμ΄μ€(λ°©λ² 1)μ Thread ν΄λμ€(λ°©λ² 2)μ μ μλμ΄ μλ€.
λ°©λ² 1. Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μμ run()
μ ꡬν
Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ₯Ό μμ±ν ν,
run()μ
λ°λμ μ€λ λκ° μνν μ½λλ₯Ό μ λλ€.
λ§μ§λ§μΌλ‘ main
μμ Runnable μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄λ₯Ό λ§λ€κ³ , μ΄λ₯Ό Thread ν΄λμ€ μμ±μμ μΈμλ‘ λ겨μ€μ Thread κ°μ²΄λ₯Ό λ§λ€λ©΄ μ€λ λκ° μμ±λλ€.
μ€λ λλ₯Ό μμ±νκ³ λμ start()
λ₯Ό νΈμΆνλ©΄ μ€λ λκ° μ€νλλ€.
public class ThreadEx {
public static void main(String[] args) {
Runnable task = new ThreadTask();
Thread thread = new Thread(task);// μ€λ λ μμ±
thread.start();// μ€λ λ μ€ν
}
}
class ThreadTask implements Runnable {
public void run() {// μ€λ λκ° μνν μμ
for (int i = 0; i < 100; i++) {
System.out.print(i);
}
}
}
λ°©λ² 2. Thread ν΄λμ€λ₯Ό μμλ°μ ν΄λμ€μμ run()
μ ꡬν
Thread ν΄λμ€λ₯Ό μμ λ°λ ν΄λμ€λ₯Ό μμ±νλ€.
run()
μ λ°λμ μ€λ λκ° μνν μμ
μ μμ±νλ€.
start()
λ‘ μ€λ λλ₯Ό μ€νμν¨λ€.
public class ThreadEx {
public static void main(String[] args) {
ThreadTask thread = new ThreadTask();// μμ±
thread.start();// μ€ν
}
}
class ThreadTask extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.print(i);
}
}
}
μ€λ λ λκΈ°ν
λ©ν° μ€λ λ νλ‘μΈμ€μ κ²½μ° νλμ μμμ μ¬λ¬ κ°μ μ€λ λκ° μ κ·Όνλ©΄ λ€μν λ¬Έμ κ° μκΈΈ μ μλ€.
μ΄λ¬ν λ¬Έμ κ° λ°μνμ§ μκ² μννλ μμ μ μ€λ λ λκΈ°νλΌκ³ νλ©° μλ°μμλ μκ³ μμ(Critical section) μ§μ κ³Ό λ½(Lock)μ ν΅ν΄ λκΈ°νλ₯Ό μννλ€.
μκ³ μμμ νλμ μ€λ λλ§ μ κ·Όν μ μλ μ½λ μμ(μ¬λ¬ κ°μ μ€λ λκ° λμμ μ κ·Όνλ©΄ μ λλ μμ)μ΄λ©° synchronized
λ₯Ό μ¬μ©νμ¬ μ€μ νλ€. μκ³ μμμ λ©μλ μ 체λ₯Ό μ§μ ν μλ μκ³ νΉμ μμλ§ μ€μ ν μλ μλ€.
λ½μ μκ³ μμμ ν¬ν¨νκ³ μλ κ°μ²΄μ μ κ·Όν μ μλ κΆνμ μλ―Ένλ€.
1. λ©μλ μ 체λ₯Ό μκ³ μμμΌλ‘ μ§μ νκΈ°
λ©μλμ λ°ν νμ
μΌμ‘±μ synchronized
λ₯Ό μμ±νλ©΄ ν΄λΉ λ©μλ μ μ²΄κ° μκ³ μμμΌλ‘ μ§μ λλ€.
μ΄λ κ² μ μ²΄κ° μκ³ μμμΈ λ©μλλ νΈμΆλμμ λ ν΄λΉ λ©μλκ° ν¬ν¨λ κ°μ²΄μ λ½μ μ»μΌλ©° μ€λ λκ° λ½μ λ°λ©νκΈ° μ μ λ€λ₯Έ μ€λ λλ λ©μλμ μ κ·Όν μ μλ€.
class SynchronizedEx {
...
public synchronized boolean sync(int a) {
...
}
}
2. νΉμ ν μμμ μκ³ μμμΌλ‘ μ§μ νκΈ°
synchronized (<ν΄λΉ μμμ΄ ν¬ν¨λ κ°μ²΄μ μ°Έμ‘°>)
λ‘ μμ±νκ³ {}
μμ μ½λλ₯Ό μμ±νλ©΄ κ·Έ λΆλΆμ΄ μκ³ μμμΌλ‘ μ§μ λλ€.
class SynchronizedEx {
...
public boolean sync(int a) {
synchronized (this) {
...
}
}
}
μ€λ λμ μνμ μ€ν μ μ΄ λ©μλ
sleep(long milliSec): milliSec λμ μ€λ λ μΌμ μ μ§
sleep()
μ Threadμ ν΄λμ€ λ©μλμ΄κΈ° λλ¬Έμ ν΄λμ€λ₯Ό ν΅ν΄ νΈμΆνλ κ²μ΄ κΆμ₯λλ€.
sleep()
μ νΈμΆνλ©΄ μ€λ λμ μνκ° μ€νμμ μΌμ μ μ§ μνλ‘ μ νλλ€.
μΌμ μ μ§ μνμ μ€λ λλ λ€μ λ κ°μ§ κ²½μ°μ μ€ν λκΈ° μνλ‘ λ³΅κ·νλ€.
- μΈμλ‘ μ λ¬ν μκ°λ§νΌ μκ°μ΄ μ§λ κ²½μ°
interrupt()
λ₯Ό νΈμΆν κ²½μ° (κΈ°λ³Έμ μΌλ‘ μμΈκ° λ°μνκΈ° λλ¬Έμ μμΈ μ²λ¦¬ νμ)
interrupt(): μΌμ μ μ§ μνμΈ μ€λ λλ₯Ό μ€ν λκΈ° μνλ‘ λ³΅κ·
interrupt()
λ sleep()
, wait()
, join()
μ μν΄ μΌμ μ μ§ μνμ μλ μ€λ λλ€μ μ€ν λκΈ° μνλ‘ λ³΅κ·μν¨λ€.
λ§μ½ μΌμ μ μ§ μνκ° μλ μ€λ λμμ interrupt()
λ₯Ό νΈμΆνλ©΄ κΈ°μ‘΄μ νΈμΆλμ΄ μ€λ λλ₯Ό λ©μΆκ² νλ sleep()
, wait()
, join()
μμ μμΈκ° λ°μλλ©° μΌμ μ μ§κ° νλ¦¬κ² λλ€.
yield(): λ€λ₯Έ μ€λ λμκ² μ€νμ μ보
λ°λ³΅λ¬Έμ μνκ° λΆνμνκ±°λ 무μλ―Έν μμ μ μ€νμν¬ λ μ μ©νκ² μ¬μ©λλ€.
yield()
κ° νΈμΆλλ©΄ ν΄λΉ μ€λ λλ μ€ν λκΈ° μνλ‘ λ°λκ³ λ¨μ μ€ν μκ°μ μ€ν λκΈ°μ΄μμ μ°μ μμκ° λμ μ€λ λμκ² μ보νλ€.
join(long milliSec): λ€λ₯Έ μ€λ λμ μμ μ΄ λλ λκΉμ§ κΈ°λ€λ¦Ό
join()
μ νΉμ μ€λ λκ° μμ
νλ λμμ μμ μ μΌμ μ μ§ μνλ‘ λ§λλ λ©μλμ΄λ€.
sleep()
κ³Ό λ§μ°¬κ°μ§λ‘ μκ°μ΄ κ²½κ³Ό λμ λ, interrupt()
κ° νΈμΆ λμ λ μ€ν λκΈ° μνλ‘ λ³΅κ·νκ³ join()
νΈμΆ μ μ§μ νλ λ€λ₯Έ μ€λ λκ° μμ
μ λ§μ³λ μ€ν λκΈ° μνλ‘ λ³΅κ·νλ€.
sleep()
κ³Ό μ μ¬νμ§λ§ sleep()
μ Thread ν΄λμ€μ ν΄λμ€ λ©μλ(static)μ΄κ³ join()
μ νΉμ μ€λ λμ λν΄ λμνλ μΈμ€ν΄μ€ λ©μλλΌλ μ μμ μ°¨μ΄λ₯Ό κ°λλ€.
Thread.sleep(1000);
thread1.join();
wait(), notify(): μ€λ λ κ°μ νμ μ μ¬μ©
λ μ€λ λκ° κ΅λλ‘ μμ μ μ²λ¦¬ν΄μΌ ν λ μ μ©ν μν μ μ΄ λ©μλμ΄λ€.
A, B μ€λ λκ° νμ ν΄μΌ ν λ
Aκ° notify()
λ₯Ό νΈμΆνλ©΄ Bκ° μ€ν λκΈ° μνκ° λκ³ Aλ wait()
μ νΈμΆνλ©° μμ μ μΌμ μ μ§ μνλ‘ λ§λ λ€.
μ΄λ° κ³Όμ μ΄ λ°λ³΅λλ©΄μ λ μ€λ λλ 곡μ κ°μ²΄μ λ°°νμ μΌλ‘ μ κ·Όνλ©΄μ ν¨κ³Όμ μΌλ‘ νμ ν μ μλ€.
'π Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] JVM(Java Virtual Machine) (0) | 2022.09.19 |
---|---|
[Java] μ€νΈλ¦Ό(Stream) (0) | 2022.09.17 |
[Java] λλ€μκ³Ό ν¨μν μΈν°νμ΄μ€ (0) | 2022.09.17 |
[Java] 컬λ μ (Collection) (3) | 2022.09.17 |
[Java] μ λ€λ¦κ³Ό μμΈ μ²λ¦¬ (0) | 2022.09.16 |