동시성 컬렉션
동시성 컬렉션이 필요한 이유 public class SimpleListMainV0 { public static void main(String[] args) { List<String> list = new ArrayList<>(); // 스레드1, 스레드2가 동시에 실행 가정 list.add("A"); ...
동시성 컬렉션이 필요한 이유 public class SimpleListMainV0 { public static void main(String[] args) { List<String> list = new ArrayList<>(); // 스레드1, 스레드2가 동시에 실행 가정 list.add("A"); ...
원자적 연산 원자적 연산: 해당 연산이 더 이상 나눌 수 없는 단위로 수행 되는 것 int i = 0; 위 로직은 둘로 쪼갤 수 없는 원자적 연산입니다. i =i +1; i의 값을 읽는다. 읽은 i에 1을 더해서 연산 된 값을 만든다. 연산 된 값을 i에 할당한다. 위 로직은 3개의 단위로 쪼개어 실행되므로 원자적 ...
기본 개념 생산자(Producer): 데이터를 생성하는 역할 소비자(Consumer): 생성된 데이터를 사용하는 역할 버퍼(Buffer): 생성자가 생성한 데이터를 일시적으로 저장한느 공간 문제 상황 생산자가 너무 빠를 때: 버퍼가 가득 찬 경우 생산자는 버퍼에 빈 공간이 생길 때까지 기다려야 함 소비자가 너무 빠를 때: ...
synchronized 단점 무한 대기: BLOCKED 상태의 스레드는 락이 풀릴 때 까지 무한 대기 공정성: 락 획득을 대기 중인 스레드 중 어떤 스레드가 락을 획득할 지 알 수 없음 위 두 문제를 해결 한 것이 Lock 입니다. LockSupport LockSupport를 사용하면 무한 대기 상태를 해결할 수 있습니다. 기능 ...
.ignore Atom Material Icons Material Theme UI → Monokai Pro CamelCase JPA Buddy Rainbow Brackets JWT (JSON Web Token) Analyzer CodeGlance Pro GitToolBox Lombok Spring Assistant ...
synchronized란? 동시성을 해결하기 위해 자바에서 제공하는 문법입니다. 출금 예제 아래 코드는 1000원이 있는 은행에서 800원씩 2번을 동시에 출금하는 로직입니다. public interface BankAccount { boolean withdraw(int amount); int getBalance(); } publi...
마우스: 시스템 설정 → 마우스 포인트 및 클릭 이동 속도 최대 보조 클릭: 끄기 스마트 확대/축소하기: 켜기 추가 제스처 전체 화면 응용 프로그램 쓸어넘기기 켜기 미션 컨...
메모리 가시성(memory visibility)이란? 멀티 스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 것 스레드간 변수 변경 시 적용 안되는 상황 public class VolatileFlagMain { public static void main(String[] args) { MyTask t...
스레드 기본 정보 public class ThreadInfoMain { public static void main(String[] args) { // main 스레드 Thread mainThread = Thread.currentThread(); log("main mainThread = " + mainThread); ...
스레드의 생성 기본적인 생성 및 실행 방법 public class HelloThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName()); } } public class HelloThreadMain...