Immutable
➡️ String Class는 문자열 연산이 적고, 조회가 많은 멀티쓰레드 환경에 유리
Mutable
StringBuffer
와 StringBuilder
클래스의 메소드가 동일StringBuffer
는 Thread-safe 함StringBuilder
는 Thread-safe 하지 않음➡️ StringBuffer
클래스는 문자열 연산이 많은 Multi-Thread 환경,
StringBuilder
클래스는 문자열 연산이 많은 Single-Thread 또는 Thread를 신경쓰지 않는 환경에 유리
: 자바 최상위 클래스
toString()
hashCode()
wait()
notify()
notifyAll()
➡️ wait()
, notify()
, notifyAll()
은 호출하는 thread가 반드시 (📌)고유 락 을 가지고 있어야 함
📌 고유락: 자바의 모든 객체는 lock을 가짐
IllegalMonitorStateException
발생: 하나의 작업 단위
멀티 태스킹: 두 가지 이상의 작업을 동시 수행
실제 동시 처리가 가능한 프로세스의 개수 = CPU 코어 개수
➡️ 둘 다 run()
메소드를 오버라이딩 하는 방식.
생성 방법의 차이임
run()
을 호출하면 Runnable 인터페이스에서 구현한 run()
이 호출되므로 따로 오버라이딩이 필요 없음 ➡️ 장점run()
은 thread를 사용하는 것이 아니다.
Thread를 사용하다
= JVM이 다수의 콜 스택을 번갈아 일처리하고 사용자에게 동시에 작업하는 것처럼 보여주는 것
run()
메소드는 main()
의 콜 스택 하나만 이용하는 것이다. (Thread를 사용하는 것이 아님)
➡️ 단지 Thread 각체의 run()
이라는 메소드를 호출하게 되는 것 뿐임
반면, start()
는 JVM이 알아서 Thread를 위한 콜 스택을 새로 만들어주고, context switching을 통해 thread답게 동작하도록 해준다.
➡️ Thread가 작업하는데 필요한 콜 스택을 생성한 다음, run()
을 호출해 그 스택 안에 run()
을 저장하도록 해줌
start()
호출 전