프로세스
스레드
여러 개의 스레드를 가지는 프로세스로, 여러 스레드가 동시에 작업을 수행
어떤 프로세스가 멀티 스레드로 동작한다는 것은 해당 애플리케이션이 동시 작업을 할 수 있다는 것을 의미
ex) 메신저 애플리케이션은 멀티 스레드로 동작 -> 메세지를 주고 받으며 동시에 파일을 업로드
메인 스레드 외 별도의 작업 스레드 활용하는 것은 작업 스레드가 수행할 코드를 작성하고, 작업 스레드를 생성하여 실행시키는 것
run() 메서드에 스레드가 처리할 작업을 작성하도록 규정, run() 메서드에는 Runnerable 인터페이스와 Thread 클래스로 정의 되어 있음
Runnerble 인터페이스를 구현한 객체에서 run()을 구현하여 스레드를 생성하고 실행
Thread 클래스를 상속 받은 하위 클래스에서 run()을 구현하여 스레드를 생성하고 실행
익명 객체를 사용하여 스레드 생성과 실행
메인 스레드는 "main"이라는 이름을 가짐
그 외에 추가적으로 생성한 스레드는 "Thread-n"이라는 이름을 가짐
스레드의 이름은 스레드의참조값.getName() 로 조회할 수 있고,
스레드의참조값.setName() 로 설정할 수 있음
멀티 스레드 프로세스는 두 스레드가 동일한 데이터를 공유하게 되어 문제가 발생할 수 있으므로 두 스레드가 하나의 스레드에 동시에 접근하지 못하도록 하는 것
Thread.sleep() : 스레드를 일시 정지시키는 메서드로, try … catch문의 try 블럭 내에 작성해주어야 함
어떤 스레드가 일시 정지되면, 대기열에서 기다리고 있던 다른 스레드가 실행됨
ex) 임계 영역으로 설정된 객체가 다른 스레드에 의해 작업이 이루어지고 있지 않을 때, 임의의 스레드 A 는 해당 객체에 대한 락을 획득하여 임계 영역 내의 코드를 실행할 수 있다. 스레드 A가 임계 영역 내의 코드 실행 중일 때는 다른 스레들은 락이 없으므로 이 객체의 임계 영역 내의 코드를 실행할 수 없다.
특정 코드 구간을 임계 영역으로 설정할 떄는 synchronized 키워드를 사용하고, 두 가지 방법으로 사용할 수 있다.