Whiteship 10주차(멀티쓰레드) 보기

기록/Whiteship 라이브 스터디 2021. 1. 24. 00:18

Actor model 동시성 과 병렬성 Critical Path 전체 실행시간에 영향을 미치는 작업 동시 작업이 진행되었을 때 가장 긴 시간이 걸리는 것 경쟁 상태 (race condition) Lock과 Condition을 이용하면 설변적인 통지가 가능 parkadd.tistory.com/48 VisualVM visualvm.github.io/ heap dump thread dump Thread A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. www.notion.so 개발자 한..

티스토리 Open API , HttpURLConnection을 사용하여 게시글 자동 수정하기

기록/History 2021. 1. 17. 21:05

History 카테고리의 게시글은 일자별 내가 무슨 글을 작성하였는지를 기록할려고 만들었다. 하지만 게시글을 작성할 때 마다 게시글을 매번 수정하여야 하는 번거로움이 있다. 그래서 티스토리 OpenAPI를 활용하여 로컬 서버를 구동시키고 한 번의 클릭(허가하기)으로 게시글을 자동으로 수정할 수 있는 프로젝트를 만들려고한다. 1 - 로그인 @GetMapping("/login") public String login(){ return "redirect:https://www.tistory.com/oauth/authorize?" + "client_id= {client_id}" + "&redirect_uri={redirect_uri}" + "&response_type=code"; } login로직이 정상적으로 끝나..

Article Thumbnail
[JAVA8] 배열 병렬 정렬 , Metaspace

기록/JAVA 2021. 1. 17. 14:53

Arrays.parallelSort() Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다. 병렬 정렬 알고리즘 배열을 둘로 계속 쪼갠다. 합치면서 정렬한다. public static void main(String[] args) { int size = 1500; int[] numbers = new int[size]; Random random = new Random(); IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt()); long start = System.nanoTime(); // 시작 시간 Arrays.sort(numbers); // Thread를 하나만 쓴다. 퀵 정렬 System.out.println..

[JAVA8] 어노테이션의 변화

기록/JAVA 2021. 1. 17. 14:45

두가지 큰 변화 자바8 부터 어노테이션을 타입 선언부에도 사용할 수 있게 됨 자바8 부터 어노테이션을 중복해서 사용할 수 있게 됨 타입 선언 부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 ... 타입에 사용할 수 있으려면 TYPE_PARAMETER - 타입 변수에만 사용할 수 있다. @Chicken @Retention(RetentionPolicy.RUNTIME) // 이 애노테이션 정보를 언제까지 유지할 것인가 @Target(ElementType.TYPE_PARAMETER) // 이 애노테이션을 사용할 곳 public @interface Chicken { } public static void main(String[] args) { } static class FeelsLikeChicken { // 는..

[JAVA8] CompletableFuture

기록/JAVA 2021. 1. 17. 14:10

자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스 Future를 사용해서 어느정도 가능했지만 하기 힘든일 들이 많았다. Future를 외부에서 완료 시킬 수 없다. 취소하거나 , get()에 타임아웃을 설정할 수는 있다. 블록킹 코드 get()을 사용하지 않고서는 작업이 끝났을 때 콜백을 실행할 수 없다. 여러 Future를 조합할 수 없다. 예) Event 정보 가져온 다음 Event에 참석하는 회원 목록 가져오기 예외 처리용 API를 제공하지 않는다. CompletableFuture - CompletableFuture (Java Platform SE 8 ) (oracle.com) Implements Future Implements CompletionStage - Complet..

Callable과 Future

기록/JAVA 2021. 1. 16. 22:58

Callable Runnable과 유사하지만 리턴 값을 받을 수 있다. Future 비동기적인 작업의 현재 상태를 조회하거나 가져올 수 있다. Future (Java Platform SE 8 ) (oracle.com) get() 결과를 가져오기 블록킹 콜이다. 타임아웃(최대한으로 기다릴시간)을 설정할 수 있다. public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Callable hello = () ->{ Thread.sleep(2000L); return "Hello"; };..

Executors

기록/JAVA 2021. 1. 16. 22:13

Thread 와 Runnable 처럼 Low-Level API를 직접 다루는게 아니다. (Runnable을 여전히 사용하긴 하지만) Executors 고수준 (High-Level) Concurrency 프로그래밍 Thread를 만들고 관리하는 작업을 애플리케이션에서 분리 그런 기능을 Executors에게 위임 Executros가 하는일 Thread 만들기 : 애플리케이션이 사용할 Thread Pool을 만들어 관리한다. Thread 관리 : Thread 생명 주기를 관리한다. 작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API를 제공한다. 주요 인터페이스 Executor execute(Runnable) ExecutorService Executor 상속 받은 인터페이스로 , Call..

Article Thumbnail
Thread

기록/JAVA 2021. 1. 16. 21:30

Coucurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱 (ProcessBuilder) 멀티 쓰레드 프로세스와 스레드의 차이 더보기 [OS] 프로세스와 스레드의 차이 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 프로세스? 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 (독립적인 객체) 운영체제로 부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미한다. 할당받는 시스템 자원의 예 CPU 시간 운영되기 위해 필요한 주소 공간 Code , Data ,..

[JAVA8] Date 와 Time

기록/JAVA 2021. 1. 14. 22:52

JAVA8에 새로운 날짜와 시간 API가 생긴 이유 그전까지 사용하던 java.util.Date클래스는 mutable하기 때문에 쓰레드에 안전하지 않다. java.util.Date 클래스를 피해야하는 이유 All about java.util.Date This post is an attempt to reduce the number of times I need to explain things in Stack Overflow comments. You may well be reading it via a link from Stack Overflow – I intend to refer to thi… codeblog.jonskeet.uk Date와 Time API 기계용 시간 과 인류용 시간으로 나눌 수 있다. 기계..

Article Thumbnail
[JAVA8] Optional

기록/JAVA 2021. 1. 12. 22:45

오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너 자바 8부터 Optional을 리턴한다. (클라이언트 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고 , 빈 값인 경우에 대한 처리를 강제한다.) 1. Optional만들기 Optional.of() Optional.ofNullable() Optional.empty() 2. Optional에 값이 있는지 없는지 확인하기 isPresent() isEmpty() - JAVA11부터 제공 3. Optional에 있는 값 가져오기 get() 4. Optional에 값이 있는 경우에 그 값을 가지고 ~~~을 하라. ifPresent(Consumer) 5. Optional에 값이 있으면 가져오고 없는 경우에 ~~~을 리턴하라. orElse(T) 6. Op..