fragile and resilient

Java 4

[Java] Thread Pool

Thread Pool은 매번 요청이 올 때마다 스레드를 생성하고 수거하는 것이 아닌, 설정한 스레드 수만큼 미리 생성하여 사용하는 것을 말합니다.Thread Pool이 필요한 이유새로운 스레드를 생성할 때마다 스레드를 위한 메모리 영역(스택)을 확보하고, 스레드가 더 이상 필요 없으면 해당 메모리 영역을 회수하는데, 이는 오버헤드가 큰 작업입니다.Executors 클래스의 정적 메서드를 통해 ExecutorService의 구현 객체를 제공받아 스레드 풀을 생성할 수 있습니다.먼저 ThreadPoolExecutor를 설명하기 위해, Thread Pool 종류 중 하나인 newFixedThreadPool() 메서드를 살펴보겠습니다.내부에서 ThreadPoolExecutor 클래스 생성자를 호출하고 있는데요...

Java 2022.09.12

[Java] 스레드 동기화 - Synchronized

얼마 전 팀 프로젝트에서 모집 인원이 초과하였는데도 스터디 참여가 가능한 일이 발생했다.상황에 대한 설명을 덧붙이면 모집 인원이 3명이고, 현재 2명이 참여한 상태에서 동시에 추가로 2명이 참여 버튼을 누를 경우 가입이 성공하여 총 4명이 되는 문제였다.'스터디 참여자 수’라는 공유 자원이 존재하여 동시성 문제라고 생각하여 스터디 참여를 처리하는 메서드에 synchronized 키워드를 붙여주니까 발생하지 않았다. 해당 문제를 팀원들과 인지한 후 동시성 문제에 대한 이야기를 많이 했는데, 현재 방법이 비효율적인 방식일 수도 있으니 해당 방법 이외의 더 좋은 방식으로 풀 수는 없는지 고민하기로 했다. 자바는 스레드 동기화를 지원하는 방법들을 제공하는데, 그중 위에서 언급한 synchronized에 4가지 ..

Java 2022.09.11

[Effective java] equals를 재정의하면 hashCode도 재정의해야 한다.

equals를 재정의한 클래스에서는 hashCode도 재정의해야 합니다. 그렇지 않으면 HashMap과 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생합니다. 이유는 밑의 Object 명세의 일부 내용을 읽으면 이해가 될 수 있을 것입니다. hashCode 규약 1) equals 비교에 사용되는 정보가 변경되지 않았다면,애플리케이션이 샐행되는 동안에는 특정 객체의 hashCode를 몇 번을 호출하든 항상 같은 값을 반환해야 한다. 2) equals가 두 객체를 같다면 판단했다면, 두 객체의 hashCode는 같은 값을 반환해야 한다. 3) equals가 두 객체를 다르다고 판단했더라고, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. hashCode를 잘못 정의했을 때, 문제..

Java 2022.02.18

[Effective java] equals 일반 규약

1편과 2편은 이어지는 하나의 내용입니다. equals()의 재정의가 필요한 상황은 언제일까요? 두 객체가 물리적으로 같은지가 아니라 논리적인 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교할 수 있도록 재정의되지 않았을 때입니다. (동치란 “같다"는 개념을 추상화한 것입니다. : https://namu.wiki/w/동치관계 ) 만약 equals()를 사용하려는 개발자가 있다면, 사용 의도는 객체의 주소가 같은 지를 알고 싶은 것이 아니라, 값이 같은 지를 알고 싶은 것일겁니다. String name1 = new String("woowacourse"); String name2 = new String("woowacourse"); System.out.println(name1 ==..

Java 2022.02.17