일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바의 정석 기초편 ch12
- 스프링 mvc2 - 검증
- 2024 정보처리기사 시나공 필기
- @Aspect
- 스프링 고급 - 스프링 aop
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch9
- 스프링 db2 - 데이터 접근 기술
- jpa 활용2 - api 개발 고급
- jpa - 객체지향 쿼리 언어
- 스프링 db1 - 스프링과 문제 해결
- 자바의 정석 기초편 ch6
- 코드로 시작하는 자바 첫걸음
- 스프링 입문(무료)
- 자바 기본편 - 다형성
- 자바 중급2편 - 컬렉션 프레임워크
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch13
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch4
- 자바의 정석 기초편 ch1
- 자바의 정석 기초편 ch2
- 게시글 목록 api
- 자바의 정석 기초편 ch14
- 자바 중급1편 - 날짜와 시간
- 자바의 정석 기초편 ch5
- 스프링 mvc1 - 서블릿
- 2024 정보처리기사 수제비 실기
- Today
- Total
목록인프런 - 실전 자바 로드맵/실전 자바 - 고급 1편, 멀티스레드와 동시성 (9)
나구리의 개발공부기록
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. Lock Condition - 예제41) Lock Condition(1) 해결 방안생산자 소비자 문제를 해결하기 위해 wait()와 notify()를 사용했지만 생산자가 생산자를 깨우고 소비자가 소비자를 깨우는 비효율 문제가 있었음핵심은 생산자 스레드는 데이터를 생성하고 대기중인 소비자 스레드에게 알려주어야 하고 소비자 스레드는 데이터를 소비하고 대기중인 생산자 스레드에게 알려주면 됨즉, 생산자 스레드가 대기하는 대기 집합과 소비자 스레드가 대기하는 대기 집합을 둘로 나누면 생산자 스레드가 데이터를 생산하면 소비자 스레드가 대기하는 대기 집합에만 알려주고 소비자 스레드가 ..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 생산자 소비자 문제 - 소개1) 생산자 소비자 문제(producer-consumer problem)(1) 이유생산자 소비자 문제는 멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제 중 하나로 여러 스레드가 동시에 데이터를 생산하고 소비하는 상황을 다룸멀티스레드 핵심을 제대로 이해하려면 반드시 생산자 소비자 문제를 이해하고 올바른 해결 방안도 함께 알아두어야 하며 이 문제를 제대로 이해하면 멀티스레드를 제대로 이해했다고 볼 수 있을만큼 중요한 내용임이전에 다뤄본 MyPrinter 예제가 생산자, 소비자 예제의 한 예시이며 생산자의 스레드와 소비자의 스레드가 특정 자원을 함..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. LockSupport1) LockSupport(1) LockSupport 기능자바 1.0 부터 제공되는 synchronized는 매우 편리한 기능이지만 무한 대기, 공정성과 같은 단점이 있어 자바 1.5부터 동시성 문제 해결을 위한 라이브러리 패키지가 추가되었음이 라이브러리에는 수많은 클래스가 있지만 가장 기본이 되는 클래스 중에는 LockSupport가 있음LockSupport는 스레드를 WAITING 상태로 변경할 수 있음WAITING 상태는 누가 깨워주기 전까지는 계속 대기하며 CPU 실행 스케줄링에 들어가지 않음park(): 스레드를 WAITING 상태로 변경하여 ..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 동기화 - 출금 예제1) 예제 시작(1) 동기화멀티스레드를 사용할 때 가장 주의해야 할 점은, 같은 자원(리소스)에 여러 스레드가 동시에 접근할 때 발생하는 동시성 문제임여러 스레드가 접근하는 자원을 공유 자원이라고 하는데 대표적인 공유 자원은 인스턴스의 필드(멤버 변수)임멀티스레드를 사용할 때는 이런 공유 자원에 대한 접근을 적절하게 동기화(synchronization)해서 동시성 문제가 발생하지 않도록 방지하는 것이 중요함(2) BankAccount이 인터페이스의 구현체를 점진적으로 발전시키면서 문제를 해결할 예정withdraw(amount): 출금할 금액을 매개변수로..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. volatile, 메모리 가시성1) 예제1(1) VolatileFlagMainwork스레드는 MyTask를 실행하고 여기에는 runFlag를 체크하는 무한 루프가 있으며 runFlag 값이 false가 되면 무한 루프를 탈출하며 작업을 종료이후에 main 스레드가 runFlag의 값을 false로 변경하면 work 스레드가 무한 루프를 탈출하며 작업을 종료하기를 기대했지만 실행해보면 출력문만 출력되고 무한루프는 종료되지 않는 것을 확인할 수 있음** 주의!여기서는 volatile 키워드를 사용하지 않는 변수를 써야함무한 루프에 다른 코드가 있으면 다르게 동작함package..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 인터럽트1) 스레드의 작업을 중간에 중단 (1) ThreadStopMainV1특정 스레드의 작업을 중단하는 가장 쉬운 방법은 변수를 사용하는 것임여기서는 runFlag를 사용해서 work 스레드에 작업 중단을 지시할 수 있음작업 하나에 3초가 걸린다고 가정하고 sleep(3000)을 사용하였고 main 스레드에서 4초 뒤에 runFlag를 false로 변경하여 작업 중단을 지시함volatile 키워드는 뒤에서 자세히 설명하는데 지금은 단순히 여러 스레드에서 공유하는 값에 사용하는 키워드라는 정도로 알고 넘어가면 됨프로그램을 실행해보면 시작 후 4초 뒤에 main 스레드가 ..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 스레드 기본 정보(1) ThreadInfoMainThread 클래스가 제공하는 정보들 확인package thread.control;public class ThreadInfoMain { public static void main(String[] args) { // main 스레드 Thread mainThread = Thread.currentThread(); log("mainThread = " + mainThread); log("mainThread.threadId() = " + mainThread.threadId()); ..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용더보기프로젝트 환경 구성 1. IDE: 인텔리제이2. Name: java-adv13. Build system: IntelliJ4. JDK: 21이상(자바 19이상에서 제공하는 기능을 사용함)1. 스레드 시작1) 스레드 시작(1) HelloThreadThread 클래스를 상속하고 스레드가 실행할 코드를 run() 메서드에 재정의Thread.currentThread()를 호출하면 해당 코드를 실행하는 스레드 객체를 조회할 수 있음Thread.currentThread().getName(): 실행 중인 스레드의 이름을 조회함package thread.start;public class ..
출처 : 인프런 - 김영한의 실전 자바 - 고급1편 (유료) / 김영한님 유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용1. 멀티태스킹과 멀티프로세싱1) 멀티태스킹과 멀티 프로세싱(1) 단일 프로그램 실행연산을 처리할 수 있는 CPU코어가 1개만 있고 2개 이상의 프로그램을 동시에 실행한다고 가정프로그램의 실행은 프로그램을 구성하는 코드를 순서대로 CPU에서 연산(실행)하는 일이며 CPU코어는 하나로 가정했으므로 한 번에 하나의 프로그램 코드만 실행할 수 있음하나의 프로그램안에 있는 코드를 모두 실행한 후에야 다른 프로그램의 코드를 실행할 수 있다면 위의 그림처럼 프로그램A가 모두 끝나고 프로그램 B가 실행됨예를 들면 음악 프로그램이 모두 끝난 뒤에야 워드 프로그램을 실행할 수 있다면 컴퓨터 ..