Java Plus thread network - accidentlywoo/sec GitHub Wiki

Java Plus thread network

Thread 들어가기

어플리케이션

  • 프로세스 : 어플리케이션 이 실행된 상태
  • 스레드 : 프로세스를 구성하는 작업단위

사용자 정의 스레드 작성방법

  1. java.lang.Thread로 상속받기
  2. 스레드가 할일은 run()메서드에 재정의 한다.
  • <<interface>>Runnable +run():void

  • java.lang.Thread

-run():void

-start():void

스레드 시작은 반드시 start() 메서드를 호출해야 한다.

Runnable 인터페이스를 구현한 구현체는, Thread클래스의 Runnable 구현체를 매개변수로 갖는 생성자를 사용해서 구현한다.

JVM Thread Scheduling

java.lang.Thread 의 start() 메소드 호출시 Stack 영역에 Thread Scheduler에의해 Runnable상태로 객체 이동한다.Thread Scheduling됨

Runnable영역에서는 우선순위(JVM은 Thread를 Priority방식과 Round-Robin방식을 사용)로에 따라 쌓인다. 우선순위 내부에선 Queue자료구조로 쌓인다.

순서가 되서 Run상태로 들어올때, java.lang.Thread run() 이 호출된다. : CPU점유상태 : CPU점유는 OS와 CPU에따라 다르다. Runnable과 Run 메서드를 왔다갔다 할 수 있다.(ex>Time Slicing)

Run상태에서 모든 처리를 완료했을 때(run()종료), Dead 상태로 이동한다. 객체는 보전되고 Thread Scheduling에서 벗어난다.

wait(), notify() 들

Object에서 선언된 Method 들이다. wait()는

  • wait(milliSeconds,..) : milliSeconds만큼 현재 쓰레드를 일시중지
  • wait() : 현재 쓰레드를 일시 중지시키고, 공유자원을 사용하는 다른 Thread가 일시중지된 쓰레드를 notify()를 호출해줘야 Runnable상태로 갈 수 있다.

wait()상태의 쓰레드가 여러개이면, notify()로 runnable상태로 변경되는 쓰레드의 순서는 Queue구조인것같다.(명시는 안했지만 FIFO이다)

wait(), notify() 는 synchronozed구문 내에서 사용된다. -> 공유 객체를 사용하는 Thread여야 한다.

Vector / HashTable

Vector - ArrayList 는 List인터페이스를 구현한 콜렉션 패키지의 친구들이다. 차이점은

Vector는 쓰레드에 동기화처리가 되어있고, ArrayList는 쓰레드에 동기화 되어있지많다.

동기화 처리를 ArrayList를 사용해 복잡하게 처리를 하는 것 보다, Vector를 사용해 동기화를 구현하는 것이 안정성과 성능에 좋다.

TCP Socket 통신

객체 통신에서 객체 직렬화 / 역직렬화와 다이나믹 클래스 로드. 리플렉션 개념이 필요하다.

직렬화 / 역직렬화

역직렬화 과정

  1. 해당클래스를 찾는다.
  2. JVM에 다이나믹 클래스 로딩
  3. 바이트 코드 검증
  4. 인터프리트
⚠️ **GitHub.com Fallback** ⚠️