동시성 제어를 위한 CAS에 대한 세부 내용은 여기에서 확인하실 수 있습니다.CAS는 단순한 연산 뿐만 아니라, 락을 구현하는데 사용할 수도 있습니다. 이번에는 synchronized, Lock(ReentrantLock)없이 CAS를 활용해서 락을 구현 해보겠습니다.이에 앞서 CAS의 필요성을 이해하기 위해 CAS없이 직접 락을 구현해보겠습니다.단순한 스핀 락 방식CAS없이 스핀 락을 구현해보겠습니다.public class SpinLockBad { private volatile boolean lock = false; public void lock() { log("락 획득 시도"); while (true) { if (!lock) { ..
컴퓨터 과학에서 사용하는 원자적 연산(atomic operation)의 의미는 해당 연산이 더 이상 나눌 수 없는 단위로 수행된 다는 것을 의미합니다. 즉, 원자적 연산은 중단되지 않고, 다른 연산과 간섭 없이 완전히 실행되거나 전혀 실행되지 않는 성질을 가지고 있습니다. 쉽게 이야기해서 멀티스레드 상황에서 다른 스레드의 간섭 없이 안전하게 처리되는 연산이라는 뜻입니다.예를 들어서 다음과 같은 필드가 있을 때int i = 0;다음 연산은 둘로 쪼갤 수 없는 원자적 연산입니다. i = 1;왜냐하면 이 연산은 다음 단 하나의 순서로 실행되기 때문입니다.(오른쪽에 있는 1 의 값은 왼쪽의 i 변수에 대입한다.)하지만 다음 연산은 원자적 연산이 아닙니다.i = i + 1;왜냐하면 이 연산은 다음 순서로 나누어 ..
이번에는 코틀린에서 람다(lambda)를 다루는 방법에 대해 알아보자! 1. 람다(lambda) 2. Closure 람다(lambda) 코틀린의 람다는 자바와는 근본적으로 다른 한 가지가 있다. 바로 코틀린에서는 함수를 변수에 할당하거나, 파라미터로 넘길 수 있다는 것이다. 이는 곧, 함수 그 자체로 값이 될 수 있다는 점이다. fun main() { val hamburgers = listOf( Hamburger("불고기버거", 1_000), Hamburger("치즈버거", 2_000), Hamburger("새우버거", 3_000), Hamburger("빅맥", 4_000), Hamburger("싸이버거", 5_000), ) // 람다를 만드는 방법 1 val isShrimpBurger = fun(ham..
방송통신대학교 기말 시험 준비로 포스팅을 하지 못했는데, 3학년 1학기가 종강된 기념으로 오랜만에 글을 작성한다. 이번 포스팅에서는 코틀린에서 object 키워드를 다루는 방법에 대해서 알아보자! 1. static 함수와 변수 2. 싱글톤 3. 익명 클래스 static 함수와 변수 Java public class PersonJava { private static final int MIN_AGE = 1; public static PersonJava newPerson(String name) { return new PersonJava(name, MIN_AGE); } private String name; private int age; private PersonJava(String name, int age) { ..
- Total
- Today
- Yesterday
- Algorithm
- 릿코드
- 파이썬
- Spring
- 코틀린
- leetcode
- Java
- 스프링 부트
- 그리디
- 알고리즘
- 데이터베이스
- 김영한
- 스프링
- mysql 8.0
- Real MySQL
- 인프런
- 문자열
- 스프링부트
- 구현
- MySQL
- 자바
- 코테
- 노마드코더
- spring boot
- 백준
- webflux
- 북클럽
- 정렬
- 자료구조
- kotlin
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 |
| 30 |