[Java] synchronized 키워드가 필요한 이유 (예시)
·
Java/MultiThread & Concurrency
상황 가정 + 실패 예시아래 예시는 좋지 않은 예시이다.만약 두개의 스레드 각 10000번 돌려 두 스레드 값을 더하여 20000이 나오게 하는 프로그램을 작성한다고 가정하자.public class SyncTest1BadMain { public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Runnable task = new Runnable(){ @Override public void run() { for (int i = 0; i 위 예시 결과는 아래와 같다. (운이 좋아 20000이 나..
[Java] 까먹지 말아야 할 Java 스레드 생명 주기 및 상태 전이
·
Java/MultiThread & Concurrency
자바에서 스레드의 생명주기는 여러 상태(state)로 나누어지며, 각 상태는 스레드가 실행되고 종료되기까지의 과정을 나타낸다.New (새로운 상태)스레드가 생성되고 아직 시작되지 않은 상태Thread 객체는 생성되었지만, start() 메서드가 호출되지 않은 상태 Runnable (실행 가능 상태)스레드가 실행될 준비가 완료된 상태 → CPU에 올릴 수 있다start() 메서드가 호출되면 이 상태로 진입스레드가 실행될 준비가 되어있고, 실제로 CPU에서 작업할 수 있는 상태하지만 모든 Runnable 스레드가 동시에 실행되진 않고, 운영체제의 스케줄링 방식에 따라 차례대로 실행된다스케줄링 실행 대기열에 있거나, 현재 CPU에서 돌아가고 있는 스레드 구분 불가보통 실행 상태라고 칭한다 Blocked (차단..