2022. 5. 22. 15:27ãJAVA/ìë°ì ì ì
1ïžâ£ íë¡ìžì€ì ì°ë ë
íë¡ìžì€ Processë 'ì€íì€ìž íë¡ê·žëš'ìŽë€.
íë¡ê·žëšì ì€ííë©Ž os ë¡ë¶í° ì€íì íìí ìì(ë©ëªšëŠ¬)륌 í ë¹ë°ì íë¡ìžì€ê° ëë€.
íë¡ìžì€ë íë¡ê·žëšì ìííëë° íìí ë°ìŽí°ì ë©ëªšëŠ¬ ë±ì ìì ê·žëŠ¬ê³ ì°ë ëë¡ êµ¬ì±ëìŽ ììŒë©°, íë¡ìžì€ì ììì ìŽì©íŽì ì€ì ë¡ ìì ì ìííë ê²ìŽ ë°ë¡ ì°ë ëìŽë€.
몚ë íë¡ìžì€ë ìµìí íë ìŽìì ì°ë ëê° ì¡Žì¬íê³ , ë ìŽìì ì°ë ë륌 ê°ì§ íë¡ìžì€ë¥Œ ë©í°ì°ë ë íë¡ìžì€ëŒê³ íë€.
íëì íë¡ìžì€ê° ê°ì§ ì ìë ì°ë ëì ê°ìë ì íëìŽ ìì§ë ìì§ë§ ì°ë ëê° ìì ì ìííëë° ê°ë³ì ìž ë©ëªšëŠ¬ ê³µê°(ížì¶ ì€í)ì íìë¡ íêž° ë묞ì íë¡ìžì€ì ë©ëªšëŠ¬ íê³ì ë°ëŒ ìì±í ì ìë ì°ë ëì ìê° ê²°ì ëë€.
- ë©í°íì€í¹ê³Œ ë©í°ì°ë ë©
íì¬ ì°ëŠ¬ê° ì¬ì©íê³ ìë ìëì°ë ì ëì€ë¥Œ í¬íší ëë¶ë¶ì osë ë©í°íì€í¹ì ì§ìíêž° ë묞ì ì¬ë¬ê°ì íë¡ìžì€ê° ëìì ì€íë ì ìë€.
ìŽì ë§ì°¬ê°ì§ë¡ ë©í°ì°ë ë©ì íëì íë¡ìžì€ ëŽìì ì¬ë¬ ì°ë ëê° ëìì ìì ì ìííë ê²ìŽë€.
cpuì ìœìŽê° íë²ì ëš íëì ìì ë§ ìíí ì ììŒë¯ë¡ ì€ì ë¡ ëìì ì²ëŠ¬ëë ìì ì ê°ìë ìœìŽì ê°ìì ìŒì¹íë€.
- ë©í°ì°ë ë©ì ì¥ëšì
ë©í°ì°ë ë©ì ì¥ì
- cpuì ì¬ì©ë¥ ì í¥ììíšë€.
- ììì ë³Žë€ íšìšì ìŒë¡ ì¬ì©í ì ìë€.
- ì¬ì©ìì ëí ìëµì±ìŽ í¥ìëë€.
- ìì ìŽ ë¶ëŠ¬ëìŽ ìœëê° ê°ê²°íŽì§ë€.
ë©ì ì ë¡ ì±í íë©Žì íìŒì ë€ìŽë¡ë ë°ê±°ë ìì±ëí륌 ëë ì ìë ê²ìŽ ê°ë¥í ìŽì ê° ë°ë¡ ë©í°ì°ë ëë¡ ìì±ëìŽ ìêž° ë묞ìŽë€.
ë§ìŒ ì±êžì°ë ëë¡ ìë² íë¡ê·žëšì ìì±íë€ë©Ž ì¬ì©ìì ìì² ë§ë€ ìë¡ìŽ íë¡ìžì€ë¥Œ ìì±íŽìŒíëë° íë¡ìžì€ë¥Œ ìì±íë ê²ì ì°ë ë륌 ìì±íë ê²ì ë¹íŽ ë ë§ì ìê°ê³Œ ë©ëªšëŠ¬ ê³µê°ìŽ íìíêž° ë묞ì ë§ì ìì ì¬ì©ì ìì²ì ìë¹ì€íêž° ìŽë µë€.
ê·žë¬ë ë©í°ì°ë íë¡ìžì€ë ì¬ë¬ ì°ë ëê° ê°ì íë¡ìžì€ ëŽìì ììì ê³µì íë©Žì ìì ì íêž° ë묞ì ë°ìí ì ìë ëêž°í(synchronization), êµì°©ìí(deadlock)ì ê°ì 묞ì ë€ì ê³ ë €íŽì ì ì€í íë¡ê·žëë°íŽìŒíë€.
2ïžâ£ ì°ë ëì 구í곌 ì€í
ì°ë ë륌 구ííë ë°©ë²ì Thread íŽëì€ë¥Œ ììíë ë°©ë²ê³Œ Runnable ìží°íìŽì€ë¥Œ 구ííë ë°©ë²ìŽ ìë€.
ìŽë쪜ì ì ííŽë ë³ ì°šìŽë ìì§ë§ Thread륌 ììë°ìŒë©Ž ë€ë¥ž íŽëì€ë¥Œ ììë°ì ì ìêž° ë묞ì Runnable ìží°íìŽì€ë¥Œ 구ííë ë°©ë²ìŽ ìŒë°ì ìŽë€.
-> Runnable ìží°íìŽì€ë¥Œ 구íí 겜ì°ìë Runnable ì 구íí íŽëì€ì ìžì€íŽì€ë¥Œ ìì±í ë€ìì ìŽ ìžì€íŽì€ë¥Œ Thread íŽëì€ì ìì±ìì 맀ê°ë³ìë¡ ì ê³µíŽìŒíë€.
static Thread currentThread() : íì¬ ì€íì€ìž ì°ë ëì 찞조륌 ë°ííë€.
String getName() : ì°ë ëì ìŽëŠì ë°ííë€.
-> Thread íŽëì€ë¥Œ ììë°ìŒë©Ž, ìì íŽëì€ìì ì¡°ììž ThreadíŽëì€ì ë©ìë륌 ì§ì ížì¶í ì ìì§ë§, Runnable ì 구ííë©Ž ThreadíŽëì€ì static ë©ìëìž currentThread()륌 ížì¶íì¬ ì°ë ëì ëí 찞조륌 ì»ìŽ ììŒë§ ížì¶ìŽ ê°ë¥íë€.
- ì°ë ëì ì€í start()
ì°ë ë륌 ìì±íë€ê³ íŽì ìëìŒë¡ ì€íëë ê²ì ìëê³ , strat()륌 ížì¶íŽìŒë§ ì°ë ëê° ì€íëë€.
ê·Œë° start()ê° ížíëìë€ê³ íŽì ë°ë¡ ì€íëëê²ì ìëê³ ìŒëš ì€í ëêž° ìíìì ìë€ê° ìì ì ì°šë¡ê° ëìŽìŒ ì€íëë€.
ê·žëŠ¬ê³ íê°ì§ ë ìì ëìŽìŒ íë ê²ì í ë² ì€íìŽ ì¢ ë£ë ì°ë ëë ë€ì ì€íí ì ìë€ë ê²ìŽë€.
-> ìŠ, íëì ì°ë ëì ëíŽ start()ê° íë²ë§ ížì¶ë ì ìë€.
3ïžâ£ start()ì run()
main ë©ìëìì run()ì ížì¶íë ê²ì ìì±ë ì°ë ë륌 ì€íìí€ë ê²ìŽ ìëëŒ ëšìí íŽëì€ì ì ìžë ë©ìë륌 ížì¶íë ê²ìŒ ë¿ìŽë€.
start()ë ìë¡ìŽ ì°ë ëê° ìì ì ì€ííëë° íìí ížì¶ì€íì ìì±í ë€ìì run()ì ížì¶íŽì ìì±ë ížì¶ì€íì run()ìŽ ì²«ë²ì§žë¡ ì¬ëŒê°ê² íë€.
몚ë ì°ë ëë ë 늜ì ìž ìì ì ìííêž° ìíŽ ìì ë§ì ížì¶ ì€íì íìë¡ íêž° ë묞ì ìë¡ìŽ ì°ë ë륌 ìì±íê³ ì€íìí¬ ë ë§ë€ ìë¡ìŽ ížì¶ ì€íìŽ ìì±ëê³ ì°ë ëê° ì¢ ë£ëë©Ž ìì ì ì¬ì©ë ížì¶ì€íì ìë©žëë€.
-> ížì¶ ì€íì 첫ë²ì§ž ë©ìëê° mainìŽ ìëëŒ run ìŽë€!
4ïžâ£ ì±êžì°ë ëì ë©í°ì°ë ë
íëì ì°ë ëë¡ ë ìì ì ì²ëŠ¬íë 겜ì°ìë í ìì ì ë§ì¹ íì ë€ë¥ž ìì ì ììíì§ë§, ëê°ì ì°ë ëë¡ ìì ì íë 겜ì°ìë 짧ì ìê°ëì 2ê°ì ì°ë ëê° ë²ê°ìê°ë©Žì ìì ì ìííŽì ëìì ë ìì ìŽ ì²ëŠ¬ëë ê²ê³Œ ê°ìŽ ëëŒê² íë€.
ê·Œë° ìì ê·žëí륌 볎멎 ì ì ìë¯ìŽ íëì ì°ë ëë¡ ë ê°ì ìì ì ìíí ìê°ê³Œ ëê°ì ì°ë ëë¡ ëê°ì ìì ì ìíí ìê°ì ê±°ì ê°ê³ , ì€íë € ëê°ì ì°ë ëë¡ ìì í ìê°ìŽ ì±êžì°ë ëë¡ ìì í ìê°ë³Žë€ ë ê±žëŠ¬ê² ëëë° ê·ž ìŽì ë ì°ë ëê°ì ìì ì íì ìê°ìŽ 걞늬Ʞ ë묞ìŽë€.
ìì ì íì í ëë íì¬ ì§íì€ìž ìì ì ìí ë±ì ì 볎륌 ì ì¥íê³ ìœìŽì€ë ìê°ìŽ ììëë€.
ë§ìœ ì¬êž°ì ëê°ì ì°ë ëê° ìì íëë°ë ë ë§ìŽ ìê°ìŽ ê±žë žë€ë©Ž ê·ž ìŽì ë ì°ë ëê° ë²ê°ìê°ë©Žì ìì ì ì²ëŠ¬íêž° ë묞ì ì°ë ëê°ì ìì ì íìê°ìŽ ììëêž° ë묞ìŽê±°ë, í ì°ë ëê° íë©Žì ì¶ë ¥íê³ ìë ëì ë€ë¥ž ì°ë ëë ì¶ë ¥ìŽ ëëꞰ륌 êž°ë€ë €ìŒíëë° ìŽë ë°ìíë ëêž°ìê° ë묞ìŽë€.
ê·žëŠ¬ê³ ìì 결곌ë ì€íí ë ë§ë€ ë€ë¥ž 결곌륌 ì»ì ì ìëë° ê·ž ìŽì ë ì€íì€ìž ìì íë¡ê·žëš(íë¡ìžì€)ìŽ osì íë¡ìžì€ ì€ìŒì€ë¬ì ìí¥ì ë°êž° ë묞ìŽë€.
JVMì ì°ë ë ì€ìŒì€ë¬ì ìíŽì ìŽë€ ì°ë ëê° ìŒë§ëì ì€íë ê²ìžì§ ê²°ì ëë ê²ê³Œ ê°ìŽ íë¡ìžì€ë íë¡ìžì€ ì€ìŒì€ë¬ì ìíŽì ì€íììì ì€íìê°ìŽ ê²°ì ëêž° ë묞ì ìê° ìí©ì ë°ëŒ íë¡ìžì€ìê² í ë¹ëë ì€íìê°ìŽ ìŒì íì§ ìê³ ì°ë ëìê² í ë¹ëë ìê° ìì ìŒì íì§ ìê² ëë€.
ë ì°ë ëê° ìë¡ ë€ë¥ž ììì ì¬ì©íë ìì ì 겜ì°ìë ì±êžì°ë°ë¥Žë³Žë€ ë©í°ì°ë ë íë¡ìžì€ê° íšì¬ ë íšìšì ìŽë€.
ë§ìŒ ì¬ì©ìë¡ë¶í° ì ë ¥ë°ë ìì Aì íë©Žì ì¶ë ¥íë ìì Bì íëì ì°ë ëë¡ ì²ëŠ¬íë€ë©Ž 첫ë²ì§žê·žëíì²ëŒ ì¬ì©ìê° ì ë ¥ì ë§ì¹ ëê¹ì§ ì묎ìŒë ì²ëŠ¬íì§ ëª»íê³ êž°ë€ëŠ¬êž°ë§ íŽìŒíë€.
ê·Œë° ëê°ì ì°ë ëë¡ ì²ëŠ¬íë€ë©Ž ì¬ì©ìì ì ë ¥ì êž°ë€ëŠ¬ë ëì ë€ë¥ž ì°ë ëê° ìì ì ì²ëŠ¬í ì ìêž° ë묞ì ë³Žë€ íšìšì ìŒë¡ cpuì ì¬ì©ìŽ ê°ë¥íë€.
-> ì¬ì©ìì ì ë ¥ì ë°ì ë ê¹ì§ ì묎ê²ë ì²ëŠ¬íì§ ëª»íê³ ìì
-> ì±êžì°ë ëìë ë¬ëŠ¬ ì¬ì©ìê° ì ë ¥ì ë§ì¹ì§ ììììë íë©Žì ì«ìê° ì¶ë ¥ëë ê²ì íìží ì ìë€.
5ïžâ£ ì°ë ëì ì°ì ìì
ì°ë ëë ì°ì ììëŒë ìì±ì ê°ì§ê³ ìëë°, ìŽ ì°ì ììì ê°ì ë°ëŒ ì°ë ëê° ì»ë ì€íìê°ìŽ ë¬ëŒì§ë€.
ì°ë ëê° ìííë ìì ì ì€ìëì ë°ëŒ ì°ë ëì ì°ì ììê° ìë¡ ë€ë¥Žê² ì§ì ëìŽ í¹ì ì°ë ëê° ë ë§ì ìì ìê°ì ê°ëë¡ í ì ìë€.
ì°ë ëê° ê°ì§ ì ìë ì°ì ììì ë²ìë 1 ~ 10ìŽë©° ì«ìê° ëììë¡ ì°ì ììê° ëë€.
ì°ë ëì ì°ì ììë ì°ë ë륌 ìì±í ì°ë ëë¡ë¶í° ììë°ëë€. mainë©ìë륌 ìííë ì°ë ëë ì°ì ììê° 5ìŽë¯ë¡ mainë©ìë ëŽìì ìì±íë ì°ë ëì ì°ì ììë ìëì ìŒë¡ 5ê° ëë€.
ì°ì ììê° ë€ë¥Žë©Ž ì°ì ììê° ëì ì°ë ëìê² ìëì ìŒë¡ ë ë§ì ìì ì€íìê°ìŽ 죌ìŽì§ê³ 결곌ì ìŒë¡ ìì A ê° ìì Bë³Žë€ ë 빚늬 ìë£ í ì ìë€.
ê·žë¬ë ì°ë ëì ëì ì°ì ìì륌 죌멎 ë ë§ì ì€íìê°ê³Œ ì€íêž°í륌 ê°ê² ë ê²ìŽëŒê³ êž°ëí ìë ìë€!
ë©í°ìœìŽëŒê³ íŽë osë§ë€ ë€ë¥ž ë°©ììŒë¡ ì€ìŒì€ë§íêž° ë묞ì ìŽë€ osìì ì€ííëëì ë°ëŒ ë€ë¥ž 결곌륌 ì»ì ì ìë€.
ë§ìŒ íìžíë€ê³ íëëŒë osì ì€ìŒì€ë¬ì ì¢ ìì ìŽëŒ ìŽëì ë ììž¡ë§ ê°ë¥í ì ëìŒ ë¿ ì íí ì ìë ìë€.
6ïžâ£ ì°ë ë 귞룹 thread group
ì°ë ë 귞룹ì ìë¡ êŽë šë ì°ë ë륌 귞룹ìŒë¡ ë€ë£šêž° ìí ê²ìŒë¡, íŽë륌 ìì±íŽì êŽë šë íìŒë€ì íšê» ë£ìŽì êŽëŠ¬íë ê²ì²ëŒ ì°ë ë 귞룹ì ìì±íŽì ì°ë ë륌 귞룹ìŒë¡ 묶ìŽì êŽëŠ¬í ì ìë€.
ëí íŽë ìì íŽë륌 ìì±í ì ìë¯ìŽ ì°ë ë 귞룹ì ë€ë¥ž ì°ë ë 귞룹ì í¬íšìí¬ ì ìë€.
ì°ë ë 귞룹ì 볎ììì ìŽì ë¡ ëì ë ê°ë ìŒë¡ ìì ìŽ ìí ì°ë ë 귞룹ìŽë íì ì°ë ë 귞룹ì ë³ê²œí ì ìì§ë§ ë€ë¥ž ì°ë ë 귞룹ì ì°ë ë륌 ë³ê²œí ìë ìë€.
ì°ë ë륌 ì°ë ë 귞룹ì í¬íšìí€ë €ë©Ž Threadì ìì±ì륌 ìŽì©íŽìŒ íë€.
몚ë ì°ë ëë ë°ëì ì°ë ë 귞룹ì í¬íšëìŽ ììŽìŒ íêž° ë묞ì ì°ë ë 귞룹ì ì§ì íë ìì±ì륌 ì¬ì©íì§ ìì ì°ë ëë Ʞ볞ì ìŒë¡ ìì ì ìì±í ì°ë ëì ê°ì ì°ë ë 귞룹ì ìíê² ëë€.
ìë° ì í늬ìŒìŽì ìŽ ì€íëë©Ž jvmì main곌 systemìŽëŒë ì°ë ë 귞룹ì ë§ë€ê³ jvm ìŽìì íìí ì°ë ë륌 ìì±íŽì ìŽ ì°ë ë 귞룹ì í¬íšìíšë€.
main ë©ìë륌 ìííë mainìŽëŒë ìŽëŠì ì°ë ëë main ì°ë ë 귞룹ì ìíê³ ê°ë¹ì§ 컬ë ì ì ìííë Finalizerì°ë ëë systemìŽëŒë 귞룹ì ìíë€.
7ïžâ£ ë°ëª¬ ì°ë ë daemon thread
ë°ëª¬ ì°ë ëë ë€ë¥ž ìŒë° ì°ë ë(ë°ëª¬ ì°ë ëê° ìë ì°ë ë)ì ìì ì ëë 볎조ì ìž ìí ì ìííë ì°ë ëìŽë€.
ìŒë° ì°ë ëê° ëªšë ì¢ ë£ëë©Ž ë°ëª¬ ì°ë ëë ê°ì ì ìŒë¡ ìëì¢ ë£ëëë° ê·ž ìŽì ë ë°ëª¬ ì°ë ëë ìŒë° ì°ë ëì 볎조ìí ì ìííë¯ë¡ ìŒë° ì°ë ëê° ëªšë ì¢ ë£ëê³ ëë©Ž ë°ëª¬ ì°ë ëì ì¡Žì¬ë ìë¯žê° ìêž° ë묞ìŽë€.
ex) ê°ë¹ì§ 컬ë í°, ìë íë¡ìžìì ìëì ì¥, íë©Ž ìë ê°±ì ë±
ë°ëª¬ ì°ë ëë 묎í룚íì 조걎묞ì ìŽì©íŽì ì€í í ëêž°íê³ ìë€ê° í¹ì ì¡°ê±ŽìŽ ë§ì¡±ëë©Ž ìì ì ìííê³ ë€ì ëêž°íëë¡ ìì±íë€.
ë°ëª¬ ì°ë ëë ìŒë° ì°ë ëì ìì±ë°©ë²ê³Œ ì€íë°©ë²ìŽ ê°ê³ , setDaemon(true)륌 ížì¶íêž°ë§ íë©Ž ëë€.
-> 3ìŽë§ë€ ë³ì autoSaveì ê°ì íìžíŽì ê·ž ê°ìŽ trueìŽë©Ž autoSave()륌 ížì¶íë ìŒì 묎íí ë°ë³µíëë¡ ì°ë ë ìì±
ìŽ ì°ë ë륌 ë°ëª¬ ì°ë ëë¡ ìì±íì§ ììë€ë©Ž ìŽ íë¡ê·žëšì ê°ì ì¢ ë£íì§ ìë í ì¢ ë£ëì§ ìì ê²ìŽë€.
8ïžâ£ ì°ë ëì ì€íì ìŽ
-> ì¬êž°ì resume(), stop(), suspend()ë ì°ë ë륌 êµì°©ìíì ë¹ ì§ê² ë§ë€êž° ì¬ìŽ deprecated ëìë€.
- ì°ë ëì ìí
1. ì°ë ë륌 ìì±íê³ start()륌 ížì¶íë©Ž ë°ë¡ ì€íëë ê²ìŽ ìëëŒ ì€íëêž°ìŽì ì ì¥ëìŽ ìì ì ì°šë¡ê° ë ë ê¹ì§ êž°ë€ë €ìŒ íë€.
ì€íëêž°ìŽì íqueueì ê°ì ìë£êµ¬ì¡°ë¡ 뚌ì ì€íëêž°ìŽì ë€ìŽìš ì°ë ëê° ëšŒì ì€íëë€.
2. ì€íëêž° ìíì ìë€ê° ìì ì ì°šë¡ê° ëë©Ž ì€íìíê° ëë€.
3. 죌ìŽì§ ì€íìê°ìŽ ë€ëê±°ë yeild()륌 ë§ëë©Ž ë€ì ì€íëêž°ìíê° ëê³ ë€ì ì°šë¡ì ì°ë ëê° ì€íìíê° ëë€.
4. ì€í ì€ì suspend(), sleep(), wait(), join(), I/O block ì ìíŽ ìŒìì ì§ìíê° ë ì ìë€.
I/O blockì ì ì¶ë ¥ìì ìì ë°ìíë ì§ì°ìí륌 ë§íë€. ì¬ì©ìì ì ë ¥ì êž°ë€ëŠ¬ë 겜ì°ë¥Œ ìë¡ ë€ ì ìëë°, ìŽë° ê²œì° ìŒìì ì§ ìíì ìë€ê° ì¬ì©ìê° ì ë ¥ì ë§ì¹ë©Ž ë€ì ì€íëêž° ìíê° ëë€.
5. ì§ì ë ìŒìì ì§ìê°ìŽ ë€ëê±°ë(time-out), notify(), resume(), interrupt()ê° ížì¶ëë©Ž ìŒìì ì§ ìí륌 ë²ìŽë ë€ì ì€íëêž°ìŽì ì ì¥ëìŽ ìì ì ì°šë¡ë¥Œ êž°ë€ëŠ¬ê² ëë€.
6. ì€íì 몚ë ë§ì¹ê±°ë stop()ìŽ ížì¶ëë©Ž ì°ë ëë ìë©žëë€.