

Immutable➡️ String Class는 문자열 연산이 적고, 조회가 많은 멀티쓰레드 환경에 유리
MutableStringBuffer와 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() 호출 전