Java (4) 썸네일형 리스트형 [Java] BlockingQueue로 생산자-소비자 문제 해결하기 1. 개요본 포스팅은 김영한 강사님의 인프런 강의 "자바 고급 1편" 중 생산자-소비자 문제에 대해 정리한 포스팅입니다.2. 생산자-소비자 문제? 생산자 스레드와 소비자 스레드가 존재한다. 두 종류의 스레드는 critical section 내부의 큐에 접근하여 데이터를 역할에 맞춰 생산 및 소비하고자 한다. 하지만 큐의 길이는 한정되어 있으므로 다음의 문제가 발생할 수 있다.생산자가 너무 빠른 생산을 하여 큐가 가득 찼을 경우 생산자 스레드는 큐에 빈 공간이 생길 때 까지 기다려야 한다.소비자가 너무 빠른 소비를 하여 큐가 비었을 경우 소비자 스레드는 큐에 데이터가 들어올 때 까지 기다려야 한다. 이처럼 두 다른 역할을 하는 스레드가 특정 자원을 함께 생산하고, 소비하면서 발생하는 문제를 생산자-소비자 .. [Java] 동시성 문제 해결하기 1. 개요본 포스팅은 김영한 강사님의 인프런 강의 "자바 고급 1편" 중 동시성 문제를 해결하기 위한 synchronized, ReentrantLock에 대해 정리한 포스팅입니다.2. 동시성 문제? 다음 클래스가 있다 가정하자.public class BankAccountV1 implements BankAccount { private int balance; public BankAccountV1(int initialBalance) { this.balance = initialBalance; } @Override public boolean withdraw(int amount) { log("거래 시작: " + getClass().getSimpleName()); .. Java Record 1. 개요다음 프로젝트에서 본격적으로 사용해보기 위해 record를 정리한 내용이다.2. Record?오라클 공식 문서에 다음과 같이 기재되어 있다.JDK 14 introduces records, which are a new kind of type declaration. Like an enum, a record is a restricted form of a class. It’s ideal for "plain data carriers," classes that contain data not meant to be altered and only the most fundamental methods such as constructors and accessors.자바 14에서 추가된 문법으로, 변경되지 않을 데이터.. Java volatile - 메모리 가시성 1. 개요본 포스팅은 김영한 강사님의 인프런 강의 "자바 고급 1편" 중 volatile 키워드에 대해 정리한 내용이다.2. 멀티스레드 동작 방식과 메모리 가시성다음 코드가 있다고 가정해보자.package thread.volatile1;import static util.MyLogger.log;import static util.ThreadUtils.sleep;public class VolatileFlagMain { public static void main(String[] args) { MyTask myTask = new MyTask(); Thread t = new Thread(myTask, "work"); log("runFlag = " + myTask.runFl.. 이전 1 다음