일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- custom annotation
- AOP
- Spring
- 도커
- Thread Library
- django-crontab
- 운영체제
- task_struct
- 함수형 인터페이스
- Process
- hiberbate
- 롬복주의점
- spring-data-jpa
- ReflectUtils
- 문자열 리터럴
- functional interface
- none이미지
- SystemCall
- FunctionalInterface
- rainbow table
- strict stubbing
- python-socketio
- 쓰레드 라이브러리
- java.util.function
- Thread Multiplexing
- sql-mappler
- OS
- 프로세스
- 문자열 불변성
- @Header
- Today
- Total
목록JAVA (6)
JH's Develog
[JAVA] 자바 쓰레드 동기화(1) - synchronized, wait()/notify() 멀티 쓰레드 환경에서 Critical section 문제를 해결하기 위해서는 Critical section에 대해 쓰레드를 동기화 해야합니다. 자바에서는 아래 두 가지 방법으로 쓰레드를 동기화 할 수 있습니다. 1) synchronize jhkimmm.tistory.com 저번 포스팅에 이어서 java.util.concurrent.locks 패키지의 lock 클래스 중 ReentrantLock 클래스를 이용하여 쓰레드를 동기화 하는 방법을 알아보겠습니다. ReentrantLock이란 ReentrantLock은 가장 일반적인 lock이며, synchronized 블럭의 wait() & notify() 처럼 awa..
synchronized 블럭을 이용해서 쓰레드를 동기화 할때 괄호안에 아래와 같이 객체의 참조변수(this)가 들어가는 경우가 있고 Class 클래스(.class)가 들어가는 경우가 있습니다. 객체의 참조변수가 들어가는 경우를 Object level lock이라고 하고 Class 클래스가 들어가는 경우를 Class level lock이라고 합니다. // Object Level locking public class ObjectLevelLockExample { public void objectLevelLockMethod() { synchronized (this) { //... } } } // Class Level locking public class ClassLevelLockExample { public v..
멀티 쓰레드 환경에서 Critical section 문제를 해결하기 위해서는 Critical section에 대해 쓰레드를 동기화 해야합니다. 자바에서는 아래 두 가지 방법으로 쓰레드를 동기화 할 수 있습니다. 1) synchronized 키워드 이용한 암묵적인 동기화 2) java.util.concurrent.locks 패키지의 lock 클래스들을 이용한 명시적 동기화 이번 포스팅에서는 synchronized 블럭을 이용한 암묵적인 동기화에 대해 정리하겠습니다. 기본적인 사용법 synchronized는 키워드는 Critical section을 설정하는데 사용되며 두가지 방식이 있습니다. 1. 메서드 전체를 Critical section으로 지정 public synchronized void example..
자바를 공부하다 보면 문자열 리터럴은 불변이라는 점이 많이 강조됩니다. String str1 = "Kim"; str1 = str1 + "Lee"; 즉 위와 같은 경우에 str1에 할당된 "Kim"이라는 문자열 리터럴이 "KimLee"로 변하는 것이 아니라, str1은 새로 생성된 "KimLee"라는 문자열을 가리키도록 변하는 것입니다. String str1 = "Kim"; String str2 = "Kim"; System.out.println(str1 == str2); // True! ※ 만약 같은 내용의 문자열을 가리키는 두 변수가 서로 다른 주솟값을 가지게 하고 싶다면 str2 = new String("Kim") 과 같이 new 연산자를 사용해서 할당해주면 됩니다. 또한 같은 문자열 리터럴 값을 가지..
람다식에 대해 잘 모른다면 아래 포스팅을 참고하길 바랍니다. [JAVA] 람다식 Lambda Expression JDK1.8 부터 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 될 수 있게 해주었습니다. 람다식 덕분에 자바는 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 잘 접목 jhkimmm.tistory.com 람다식에 대한 기본적인 내용을 학습했다면, 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓은 java.util.function 패키지에 대해서 알아보아야 합니다. 매번 새로운 함수형 인터페이스를 정의한다면 재사용성이나 유지보수 측면에서 좋지 않으므로, 가능하면 이 패키지의 인터페이스를 사용하는 것이 좋습니다. 가장 기본적인 함수형 인터페이스 함..
JDK1.8 부터 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 될 수 있게 해주었습니다. 람다식 덕분에 자바는 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 잘 접목시키는데 성공할 수 있었습니다. 람다식을 한마디로 표현하자면 "메서드를 하나의 식으로 표현한 것"입니다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1) ); 위 코드에서 (i) -> (int)(Math.random()*5+1) 부분이 바로 람다식인데, 이렇게 람다식을 활용하면 람다식 자체만으로도 메서드의 역할을 대신할 수 있습니다. 게다가 람다식은 메서드의 매개변수로 전달되거나 결과값으로 반환될 수도 있으므로 람다식으로 인해 메서드..