Java Plus thread network - accidentlywoo/sec GitHub Wiki
어플리케이션
- 프로세스 : 어플리케이션 이 실행된 상태
- 스레드 : 프로세스를 구성하는 작업단위
- java.lang.Thread로 상속받기
- 스레드가 할일은 run()메서드에 재정의 한다.
-
<<interface>>Runnable +run():void
-
java.lang.Thread
-run():void
-start():void
스레드 시작은 반드시 start() 메서드를 호출해야 한다.
Runnable 인터페이스를 구현한 구현체는, Thread클래스의 Runnable 구현체를 매개변수로 갖는 생성자를 사용해서 구현한다.
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에서 벗어난다.
Object에서 선언된 Method 들이다. wait()는
- wait(milliSeconds,..) : milliSeconds만큼 현재 쓰레드를 일시중지
- wait() : 현재 쓰레드를 일시 중지시키고, 공유자원을 사용하는 다른 Thread가 일시중지된 쓰레드를 notify()를 호출해줘야 Runnable상태로 갈 수 있다.
wait()상태의 쓰레드가 여러개이면, notify()로 runnable상태로 변경되는 쓰레드의 순서는 Queue구조인것같다.(명시는 안했지만 FIFO이다)
wait(), notify() 는 synchronozed구문 내에서 사용된다. -> 공유 객체를 사용하는 Thread여야 한다.
Vector - ArrayList 는 List인터페이스를 구현한 콜렉션 패키지의 친구들이다. 차이점은
Vector는 쓰레드에 동기화처리가 되어있고, ArrayList는 쓰레드에 동기화 되어있지많다.
동기화 처리를 ArrayList를 사용해 복잡하게 처리를 하는 것 보다, Vector를 사용해 동기화를 구현하는 것이 안정성과 성능에 좋다.
객체 통신에서 객체 직렬화 / 역직렬화와 다이나믹 클래스 로드. 리플렉션 개념이 필요하다.
역직렬화 과정
- 해당클래스를 찾는다.
- JVM에 다이나믹 클래스 로딩
- 바이트 코드 검증
- 인터프리트