π»
Java νλ‘κ·Έλλ° - μ€λ λ(Thread) λ³Έλ¬Έ
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Thread.html
νλ‘μΈμ€(Proccess)
: νλμ μμ© νλ‘κ·Έλ¨μ λ§νκ³ , OS μμ λκ° μ΄μμ νλ‘κ·Έλ¨μ΄ μ€ννλ©΄ λ©ν° νμ€νΉ(Multitasking)μ΄λΌ νλ€.
(νλμ μ»΄ν¨ν°μμ μ¬λ¬ κ°μ νλ‘κ·Έλ¨μ΄ λμμ μ€ννλ κ²μ λ©ν° νλ‘μΈμ€)
- λ©ν° νλ‘μΈμ€λ€μ μλ‘ λ 립μ μ΄κΈ° λλ¬Έμ νλμ νλ‘μΈμ€μμ μ€λ₯κ° λ°μν΄λ λ€λ₯Έ νλ‘μΈμ€λ€μκ² μν₯μ λ―ΈμΉμ§ μλλ€.
μ€λ λ(Thread)
: νλ‘μΈμ€ λ΄μμ λμμ μ€νλλ λ 립μ μΈ μ€ν λ¨μλ₯Ό λ§νλ€. (νλμ μμ )
λ©ν° μ€λ λλ νλμ νλ‘κ·Έλ¨μμ λμμ μ¬λ¬κ°μ§ μΌμ μνν μ μλλ‘ ν΄μ£Όλ κ²μ΄λ€. (νλ μ΄μμ μμ )
- λ©ν° μ€λ λλ νλμ νλ‘μΈμ€ λ΄λΆμ μμ±λμ΄ μμ μ μνμ νμν μμλ€μ 곡μ νκΈ° λλ¬Έμ νλμ μ€λ λκ° μμΈλ₯Ό λ°μμν€λ©΄ λ€λ₯Έ μ€λ λμλ μν₯μ λ―ΈμΉκ² λλ€.
μκ°μ νλ¦λλ‘ μμ°¨μ μΌλ‘ μ€νλλ κ²μ λ¨μΌμ€λ λ, νλ‘κ·Έλ¨ λ΄λΆμ λ©ν° νμ€νΉμ΄ λ©ν° μ€λ λ.
λ©ν°μ€λ λ(Multi Thread)
- νλμ νλ‘μΈμ€λ₯Ό λ€μμ μ€λ λλ‘ λ§λ€μ΄ μ€ννλ κ²μ΄λ€.
- νλμ νλ‘μΈμ€ λ΄μ λ€μμ μ€ν λ¨μλ€μ΄ μ‘΄μ¬νμ¬ μμ μ μνμ νμν μμλ€μ 곡μ νκΈ° λλ¬Έμ μμμ μμ±κ³Ό κ΄λ¦¬κ° μ€λ³΅λλ κ²μ μ€μΌ μ μλ€.
- μ±κΈ μ€λ λ μ ν리μΌμ΄μ μμλ λ©μΈ μ€λ λκ° μ’ λ£νλ©΄ νλ‘μΈμ€κ° μ’ λ£λμ§λ§, λ©ν° μ€λ λ μ ν리μΌμ΄μ μμλ μ€ν μ€μΈ μ€λ λκ° νλλΌλ μλ€λ©΄, νλ‘μΈμ€λ μ’ λ£λμ§ μλλ€.
μμ 1)
Run() μ μ¬μ μν΄μ μμ μ€λ λκ° μ€νν μ½λλ₯Ό μμ±ν΄μΌνλ€.
μμ μ€λ λλ μμ±λλ μ¦μ μ€νλλ κ²μ΄ μλλΌ, start() λ©μλλ₯Ό νΈμΆν΄μΌλ§ λΉλ‘μ μ€νλλ€.
μ€νν΄λ³΄λ©΄ μ€νν λλ§λ€ λ€λ₯΄κ² κ²°κ³Όκ° λμ€λ κ²μ λ³Ό μ μλ€. μ΄κ²μ μμ°¨μ μΌλ‘ μ€νλλ κ²μ΄ μλλΌ
μ€λ λ μ²λ¦¬λ₯Ό ν΄μ€μΌλ‘μ¨ λμμ μ€νλλ κ²μ μ μ μλ€.
κ°μ²΄μμ ν¨μλ₯Ό νΈμΆν λμλ μ§μ νΈμΆνμμ§λ§ μ€λ λμμλ start()λ₯Ό μ΄μ©ν΄μ μ€νν΄μ€λ€. (μμ€ν νΈμΆ)
Q. μ½λ°± ν¨μμ λν΄ μκ³ μμ΅λκΉ? λ©΄μ μ§λ¬ΈμΌλ‘ λ§μ΄ λμ¨λ€.
μμ 2) μ€λ λλ₯Ό μ΄μ©ν΄μ μ«μλ₯Ό μΉ΄μ΄ν νλ©΄μ μ¬μ©μ μ λ ₯λ°κΈ°
staticμ΄ μ€λ λμμ μ μ©νκ² μ°μΈλ€. κ°μ²΄ λ°μ μμ΄ λ€λ₯Έ ν΄λμ€λΌλ¦¬ λ°μ΄ν°λ₯Ό 곡μ ν΄μ μΈ μ μκΈ° λλ¬Έμ.
λ©ν° μ€λ λλ‘ μ€ννλ μ ν리μΌμ΄μ μ κ°λ°νλ €λ©΄ λ¨Όμ λͺ κ°μ μμ μ λ³λ ¬λ‘ μ€νν μ§ κ²°μ νκ³ κ° μμ λ³λ‘ μ€λ λλ₯Ό μμ±ν΄μΌ νλ€.
μμ 3)
Runnable μ μμ μ€λ λκ° μ€νν μ μλ μ½λλ₯Ό κ°μ§κ³ μλ κ°μ²΄λΌκ³ ν΄μ λΆμ¬μ§ μ΄λ¦μ΄λ€. μΈν°νμ΄μ€ νμ μκΈ° λλ¬Έμ ꡬν κ°μ²΄λ₯Ό λ§λ€μ΄ λμ ν΄μΌνλ€. Runnableμλ run()λ©μλ νλκ° μ μλμ΄ μλλ°, ꡬν ν΄λμ€λ run()μ μ¬μ μν΄μ μμ μ€λ λκ° μ€νν μ½λλ₯Ό μμ±ν΄μΌνλ€.
μμ 4) μΈκ°μ μ€λ λ
μ€λ λλ κΈ°λ³Έμ μΌλ‘ λ 립μ€λ λ, κ·Έλ¬λ λ©μΈμ΄ λλλ©΄ κ°μ΄ λλ΄μΌνλ κ²½μ°κ° μλ€.(μ’ μμ€λ λ)
λ°λͺ¬ μ€λ λ
- μ£Ό μ€λ λμ μμ μ λλ 보쑰μ μΈ μν μ νλ μ€λ λ
- μ£Ό μ€λ λκ° μ’ λ£λλ©΄ λ°λͺ¬ μ€λ λλ κ°μ μ μΌλ‘ μλ μ’ λ£
ex_μλνλ‘μΈμμ μλμ μ₯, λ―Έλμ΄ νλ μ΄μ΄μ λμμ λ° μμ μ¬μ, κ°λΉμ§ 컬λ ν°
- λ°λͺ¬ μ€λ λ μ€μ
- μ£Ό μ€λ λκ° λ°λͺ¬μ΄ λ μ€λ λμ setDeamon(true)λ₯Ό νΈμΆ
- λ°λμ start()λ©μλ νΈμΆμ μ setDeamon(true)λ₯Ό νΈμΆν΄μΌνλ€.
- λ°λͺ¬μ€λ λ νμΈ λ°©λ²
- isDaemon()λ©μλμ λ¦¬ν΄ κ°μ μ‘°μ¬
μλλ₯Ό μμ±νλ€ λ³΄λ©΄ κ³μμ μΌλ‘ λ²νΌμλ€κ° μμ νλ κ²μ μ μ₯νλ€κ° μ μ₯λ²νΌμ λλ₯΄λ©΄ λ²νΌμ λ΄μ©μ νλμ¨μ΄λ‘ μ μ₯νκ³ , μμ€λ₯Ό ν΄λ¦νλ©΄ μ§μ°κΈ°.
μμ 5)
μμ 6)
κ°μ²΄ λ°μν΄μ run λ©μλνλ©΄ λ¨μΌμ€λ λ
start()λ©μλλ₯Ό μ΄μ©ν΄μ λ©ν°μ€λ λ μν€λ©΄ mainμ΄ λλλ©΄ λλλ²λ¦°λ€.
Thread join() λ©μλ : νμͺ½μμ λλ λ κ°μ§ κΈ°λ€λ €μ€λ€.
joinμ μ΄μ©ν΄μ λ€λ₯Έ ν΄λμ€κ° μ’ λ£ν λκΉμ§ μ€λ λλ μΌμ μ μ§νλ€.
λμμ±(Concurrency) : νλμ μ½μ΄μμ λ©ν° μ€λ λκ° λ²κ°μ κ°λ©° μ€ννλ κ²
μ΄λ€ μμμ μν΄ λμμ±μΌλ‘ μ€νν κ²μΈκ°λ₯Ό κ²°μ νλ κ²μ μ€μΌμ€λ§(CPU)μ΄λΌκ³ νλ€.
λ³λ ¬μ±(Parallelism) : λ©ν° μ½μ΄μμ λ©ν° μμ μ λμμ μ€ννλ κ²
μ€λ λμ μμ ν μ’ λ£(stopνλκ·Έ, interrupt())
- μ€λ λλ μμ μ run() λ©μλκ° λͺ¨λ μ€νλλ©΄ μλμ μΌλ‘ μ’ λ£λλ€.
- κ²½μ°μ λ°λΌμλ μ€ν μ€μΈ μ€λ λλ₯Ό μ¦μ μ’ λ£ν νμκ° μλ€.
μ) λμμμ λκΉμ§ 보μ§μκ³ , μ¬μ©μκ° λ©μΆ€μ μꡬνλ κ²½μ°
- κ·Έλ΄λ, Threadλ μ€λ λλ₯Ό μ¦μ μ’ λ£μν€κΈ° μν΄ stop()λ©μλλ₯Ό μ 곡νλ€.
- κ·Έλ¬λ stop() λ©μλλ‘ μ€λ λλ₯Ό κ°μκΈ° μ’ λ£νκ² λλ©΄ μ€λ λκ° μ¬μ©μ€μ΄λ μμλ€μ΄ λΆμμ ν μνλ‘ λ¨κ²¨μ§κΈ° λλ¬Έμ deprecatedλμ΄ μ¬μ©νμ§ μλλ€.
- λ°λΌμ stopνλκ·Έλ₯Ό μ΄μ©νκ±°λ interrupt() λ©μλλ₯Ό μ΄μ©νμ¬ μ΄λ₯Ό μ²λ¦¬νλ€.
yield()
- λ€λ₯Έ μ€λ λμκ² μ€νμ μ보νκ³ μμ μ μ€ν λκΈ° μνλ‘ κ°λ κ²
- 무μλ―Έν λ°λ³΅μ μ§νν λ μ¬μ©, μ 체 νλ‘κ·Έλ¨ μ±λ₯μ λμ
- yield()λ₯Ό νΈμΆν μ€λ λλ μ€ν λκΈ° μνλ‘ λμκ°κ³ λμΌν μ°μ μμ λλ λμ μ°μ μμλ₯Ό κ°λ λ€λ₯Έ μ€λ λκ° μ€νκΈ°νλ₯Ό κ°μ§
μ€λ λ 곡μ
- λ°λͺ¬μ€λ λ, join, λκΈ°ν
β
Synchronized
- μ€λ λκ° μ¬μ© μ€μΈ κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λκ° λ³κ²½ν μ μλλ‘ νλ €λ©΄ μ€λ λ μμ μ΄ λλ λ κΉμ§ κ°μ²΄μ μ κΈμ κ±Έμ΄ λ€λ₯Έ μ€λ λκ° μ¬μ©ν μ μλλ‘ ν΄μΌν¨
- μλ°λ μκ³μμμ μ§μ νκΈ° μν΄ λκΈ°ν(Sychronized)λ©μλμ λκΈ°ν λΈλ‘μ μ 곡
- λ¨ νλμ μ€λ λλ§ μ€νν μ μλ λ©μλ λλ λΈλ‘μ λ§νλ€.
- λ€λ₯Έ μ€λ λλ λ©μλλ λΈλ‘μ΄ μ€νμ΄ λλ λ κΉμ§ λκΈ°ν΄μΌ νλ€.
'KITRI > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Java νλ‘κ·Έλλ° - μ±ν νλ‘κ·Έλ¨ (1) | 2020.05.25 |
---|---|
Java νλ‘κ·Έλλ° - λ€νΈμν¬ ν΅μ (0) | 2020.05.25 |
Java νλ‘κ·Έλλ° - byte μ μΆλ ₯, charμ μΆλ ₯ (0) | 2020.05.20 |
Java νλ‘κ·Έλλ° - μμΈμ²λ¦¬(Exception) (0) | 2020.05.18 |
Java νλ‘κ·Έλλ° - MVC ν¨ν΄ (0) | 2020.05.15 |