인코딩을 통해(약속되어 있는 문자를 매핑한다)
ASCII CODE
1Byte는 255까지 표현 가능
ASCII CODE는 7비트만 사용하기 때문에 127까지 표현한다.
UNICODE
2BYTE를 사용
-> 알파벳은 1BYTE만 사용하면 되는데 2BYTE를 사용하는 겻은 비효율적
UTF-8(거의 표준치에 가까워지고 있다.)
그래서 나온 것이 UTF-8
영어는 1BYTE
한글, 한자 등은 3BYTE를 사용함
MS949
한글 완성형 -> 글자 단위
한글 조합형 -> 자음, 모음 단위
UNICODE
2바이트로 모든 문자를 표현
-> 영어는 손해
-> 그래서 UTF가 나옴
UTF-8
1~4바이트로 가변적임
한글은 3,4바이트로 표현 가능
-> 가장 보편적으로 많이 쓰임 (아스키코드와 1바이트로 완벽 호환)
하지만 한번에 하나씩 끝내는 것이 더 효율적이기 때문에 싱글 코어에서는 비효율적
(Thread를 이동하는 것에도 수행시간이 추가됨)
Thread class에는 무조건적으로 run() 메서드가 존재해야한다.
상속한 class의 run 메서드를 상속 받은 class에서 오버라이딩 한다.
부모 Thread class의 start 메서드는 run을 핸들링 해준다.
다만 start 메서드로 핸들리응 해줘야 우리가 기대하는 스케줄링을 하는 Thread가 실행이 된다.
인터페이스는 메소드를 추상적으로 선언한 추상 클래스와 비슷하다.
따라서 상속 받은 클래스에서 기능을 구현해줘야한다.
task class에서 run을 재정의한다.
자바에서는 다중 상속이 지원되지 않기 때문에 runnable 인터페이스를 구현하는 방식을 자주 사용한다.
그렇게 만든 인스턴스를 새로운 Thread 인스턴트에 인스턴스로 넣어줘서 생성한다.
- Thread에서 sleep()은 lock이고
- yield는 일을 양보하고
- wait은 대기 상태에 들어간다.
- notify는 wait 된 스레드 중 한 스레드만 깨운다.(지정 불가)
- notifyAll은 모든 스레드를 깨운다.
식당이라면 웨이팅하는 손님(wait) notify는 손님이 한 명 나가면 아무나 한 명 불러온다.
- join은 다른 Thread가 끝날 때까지 기다린 뒤 Join한다.