728x90 JAVA/Effective Java65 item 81. wait와 notify보다는 동시성 유틸리티를 애용해라 새로운 사실! wait 그리고 notify는 올바르게 사용하기가 아주 까다롭다. 따라서 고수준 동시성 유틸리티를 사용하는 것이 좋다. wait와 notify란? : 스레드의 상태 제어를 위한 메소드 wait : 가지고 있던 고유 락을 해제하고, 스레드를 잠들게 하는 역할을 하는 메서드 notify : 잠들어 있던 스레드 중 임의로 하나를 골라 깨우는 역할을 하는 메서드 java.util.concurrent의 고수준 유틸리티 실행자 프레임워크 동시성 컬렉션 List, Queue, Map과 같은 표준 컬렉션 인터페이스에 동시성을 가미해 구현한 고성능 컬렉션 높은 동시성에 도달하기 위해 동기화를 각자 내부에서 수행 따라서 동시성 컬렉션에서 동시성을 무력화하는 것은 불가능하다. 외부에서 락을 추가로 사용하면 오.. 2022. 8. 31. item 80. 스레드보다는 실행자, 테스크, 스트림을 애용하라 java.util.concurrent 패키지의 등장 : 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 테스크 실행 기능 포함. -> 뛰어난 작업 큐를 생성할 수 있게 되었다. // 작업 큐 생성 ExecutorService exec = Executors.newSingleThreadExecutor(); // 실행자에 실행할 테스크를 넘기는 방법 exec.execute(runnable); //실행자를 종료시키는 방법 exec.shutdown(); 실행자 서비스의 주요 기능들 get 특정 테스크가 완료되기를 기다림 invokeAny / invokeAll 테스크 모음 중 아무거나 하나 or 모든 테스크가 완료되기를 기다림 awaitTermination 실행자 서비스가 종료하기를 기다림 ExecutorCom.. 2022. 8. 31. item 79. 과도한 동기화는 피하라 * 동기화란? 여러개의 thread가 하나의 리소스를 사용하려고 할 때 ,사용하려는 thread를 제외한 나머지 thread들이 리소스에 접근하지 못하게 막는것 * 동기화 방법 메소드 자체를 synchronized로 선언 블록으로 객체를 받아 lock을 거는 방법 - syncrhonized(this) * 과도한 동기화의 문제점 : 성능을 떨어트리고, 교착상태에 빠뜨리며, 데이터를 훼손하고, 예측할 수 없는 동작을 낳는다. 응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하지 말아라! 제어 ex) 동기화된 영역 안에서 재정의할 수 있는 메서드 호출, 클라이언트가 넘겨준 객체 호출 ----> 동기화된 영역을 포함한 클래스 관점에서, 클라이언트가 넘겨준 메.. 2022. 8. 31. 공지 앞으로 Effective Java는 개인 notion에 업로드 할 예정입니당~! 나중에 하나씩 다시 올릴 수도 있고... 어짜피 내 티스토리 아무도 안보니까...ㅎㅎㅎㅎㅎㅎ 2022. 7. 30. item 56. 공개 API 요소에는 항상 문서화 주석을 작성하라 보호되어 있는 글 입니다. 2022. 7. 14. item 55. 옵셔널 반환은 신중하게 해라 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지는 무엇이 있을까? [ 자바 8 이전 ] 예외 던지기 진짜 예외 사항에서 사용하고 있는지 생각해라. 예외를 생성할 때 스택 추적 전체를 캡쳐해야 하므로 비용이 많이 든다. null 반환하기 null처리 코드를 별도로 추가해야 한다. null처리를 무시하고 반환된 null값을 어딘가에 저장하면 언젠가 NullPointerException이 발생할 수 있다. [ 자바 8 이후 ] Optional 원소를 최대 1개 가질 수 있는 '불변' 컬렉션 null이 아닌 T 타입 참조를 하나 담거나, 혹은 아무것도 담지 않을 수 있다. 아무것도 담지 않은 optional은 '비었다'고 하고, 무엇인가 담은 옵셔널은 '비지 않았다'라고 한다. 보통은 T를.. 2022. 7. 14. 이전 1 2 3 4 5 ··· 11 다음 728x90