MapleStory Finger Point Cute Line Smiley Blinking Hello Kitty Angel MapleStory Finger Point

πŸ’Ž JAVA/πŸ“šλͺ…ν’ˆ JAVA_ESSENTIAL

Λšβ‚Šβœ©β€§β‚Š (κ°œλ…) μžλ°” μŠ€λ ˆλ“œ - λͺ…ν’ˆ JAVA ESSENTIAL Λšβ‚Šβœ©β€§β‚Š

HYEJU01 2024. 4. 12. 21:43

λ©€ν‹°νƒœμŠ€ν‚Ή

multi + tasking

λ‹€μˆ˜μ˜ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 것

ex) λ―Έλ””μ–΄ ν”Œλ ˆμ΄μ–΄ (μ˜€λ””μ˜€+λΉ„λ””μ˜€μž¬μƒ λ™μ‹œμ— μž…λ ₯처리)

μŠ€λ ˆλ“œ / 운영체제

μš΄μ˜μ²΄μ œμ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” μž‘μ—…

λ©€ν‹° ν”„λ‘œμ„Έμ‹±

ν•˜λ‚˜μ˜ μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬κ°œμ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬μ„±ν•˜μ—¬ 각 ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 기법 (μžμ› / λ©”λͺ¨λ¦¬ 독립적)

λ©€ν‹° μŠ€λ ˆλ”©

ν•˜λ‚˜μ˜ μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±ν•˜κ³  각 μŠ€λ ˆλ“œλ‘œ ν•˜μ—¬κΈˆ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 기법 (μžμ›/λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•¨)

λ‹€μˆ˜μ˜ μŠ€λ ˆλ“œλ₯Ό λ™μ‹œμ— μ‹€ν–‰μ‹œν‚€λ„λ‘ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 기법

(ex ) μ›Ή μ„œλ²„)

μžλ°” μŠ€λ ˆλ“œ / JVM

JVM 에 μ˜ν•΄ μŠ€μΌ€μ₯΄ λ˜λŠ” μ‹€ν–‰ λ‹¨μœ„ μ½”λ“œ 블둝

  • jvm μžλ°”κ°€μƒκΈ°κ³„κ°€ 운영체제 역할을 함
  • JVM 1 = μžλ°” μ‘μš©ν”„λ‘œκ·Έλž¨ 1 → μžλ°” μŠ€λ ˆλ“œ N ⇒ λ©€ν‹° μŠ€λ ˆλ”© 지원

μžλ°” μŠ€λ ˆλ“œ λ§Œλ“€κΈ° —- Thread 클래슀

ava.lang.Thread , Thread 클래슀λ₯Ό 상속 λ°›μ•„ μ½”λ“œλ₯Ό λ§Œλ“ λ‹€.

  • Thread 클래슀의 μ£Όμš”λ©”μ†Œλ“œ : run(), start() λ“±λ“±
  1. Thread 클래슀 상속 → run () μ˜€λ²„λΌμ΄λ”©
  2. μŠ€λ ˆλ“œ 객체 생성 : TimeThread th = new TimeThread();
  3. μŠ€λ ˆλ“œ μ‹œμž‘ : th.start(); // jvm 에 μŠ€λ ˆλ“œλ‘œ 인식 + μŠ€μΌ€μ₯΄λ§ κ°€λŠ₯ μƒνƒœ !! start() ν•¨μˆ˜λŠ” μ ˆλŒ€ μ˜€λ²„λΌμ΄λ”© XXX !!
  4. jvm이 μŠ€λ ˆλ“œλ₯Ό μŠ€μΌ€μ₯΄λ§ → run() μ‹€ν–‰ 됨
  • sleep(1000); → μŠ€λ ˆλ“œκ°€ 1000ms λ™μ•ˆ 잠 μžλŠ” μ½”λ“œ (μ˜ˆμ™Έμ²˜λ¦¬ν•„μˆ˜ → try - catch )
try {
	sleep(1000);
	}
catch(InterruptedException e) {return;}

μžλ°” μŠ€λ ˆλ“œ λ§Œλ“€κΈ° —— Runnable μΈν„°νŽ˜μ΄μŠ€

java.lang.Runnable , 좔상 λ©”μ†Œλ“œ run() 만 가진 μΈν„°νŽ˜μ΄μŠ€

  • Runnable μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ → run () μ˜€λ²„λΌμ΄λ”©
  • μŠ€λ ˆλ“œ 객체 생성 : Thread th = new Thread(new TimerRunnable());
  • μŠ€λ ˆλ“œ μ‹œμž‘ : th.start();

main μŠ€λ ˆλ“œ

JVM 은 μ‘μš©ν”„λ‘œκ·Έλž¨ μ‹œμž‘ μ „ μŠ€λ ˆλ“œ ν•˜λ‚˜ 생성 → main () λ©”μ†Œλ“œ μ‹€ν–‰ν•˜λ„λ‘ 함

μŠ€λ ˆλ“œ μ’…λ£Œ — 슀슀둜 μ’…λ£Œ

  1. run() λ©”μ†Œλ“œκ°€ μ’…λ£Œλ¨
  2. λ¦¬ν„΄ν•˜λŠ” 경우

μŠ€λ ˆλ“œ μ’…λ£Œ — κ°•μ œ μ’…λ£Œ

  1. μ’…λ£Œ μ‹œν‚¬ μŠ€λ ˆλ“œ 객체의 interrup() λ©”μ†Œλ“œ 호좜
  2. InterruptedException μ˜ˆμ™Έ λ°œμƒ → μ˜ˆμ™Έμ²˜λ¦¬ ν•΄μ£ΌκΈ° try-catch (sleep())

μŠ€λ ˆλ“œ 동기화 —- synchronized

λ‹€μˆ˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유 데이터λ₯Ό λ™μ‹œμ— μ ‘κ·Όν•˜λŠ” 경우, 곡유 데이터 값이 비정상 적으둜 μœ μ§€ λ˜μ§€ μ•Šλ„λ‘ μŠ€λ ˆλ“œμ˜ 싀행을 μ œμ–΄ν•˜λŠ” 기술 ⇒ μˆœμ°¨ν™” ν•˜μ—¬ ν•΄κ²°

  • ν•˜λ‚˜μ”© 순차적으둜 μ‹€ν–‰ν•˜λ„λ‘ μ œμ–΄ν•˜λŠ” 기술
  • synchronized ν‚€μ›Œλ“œ : 동기화가 μ„€μ •λœ μž„κ³„ μ˜μ—­μœΌλ‘œ μ§€μ •ν•˜κ²Œν•΄μ€Œ
  • lock : synchronized μ½”λ“œμ— μ ‘κ·Όν•˜λ©΄ lock 이 κ±Έλ¦°λ‹€.

μŠ€λ ˆλ“œ 동기화 —- wait() - notify()

ν•œ 개의 κ³΅μœ λ°μ΄ν„°λ₯Ό , λ‘κ°œμ˜ μŠ€λ ˆλ“œκ°€ 데이터λ₯Ό μ£Όκ³  받을 λ•Œ 좩돌 ⇒ producer - consumer 문제

ex) λ―Έλ””μ–΄ ν”Œλ ˆμ΄μ–΄ (μž…λ ₯μŠ€λ ˆλ“œ ↔ 동기화 객체 ↔ μž¬μƒμŠ€λ ˆλ“œ)

  • λͺ¨λ“  κ°μ²΄λŠ” 동기화 객체가 됨. (object ν΄λž˜μŠ€μ— wait() - notify() )