본문 바로가기

Language/Java15

얕은 복사를 피하기 위해서 참조객체는 clone을 재구현해야 한다? package sec03.exam04_clone; public class Member implements Cloneable { private String id; private String name; private String password; private int age; private boolean adult; public Member(String id, String name, String password, int age, boolean adult) { this.id = id; this.name = name; this.password = password; this.age = age; this.adult = adult; } public Member getMember(){ Member cloned = nu.. 2019. 10. 21.
타입파라미터를 제한하는 방법은 두가지이다. 이것이 자바다 - 13장 제네릭-제한된 타입 파라미터 으로 작성해서 제한하는 내용을 타입파라미터에 명시하는 방법과 public static V getValue(P p, K k) { if(p.getKey() == k) { return p.getValue(); } else { return null; } 제한하는 내용을 그냥 파라미터의 다형성을 활용하는 방법 두가지 다 활용될 수 있다. public static V getValue(Pair p, K k) { if(p.getKey() == k) { return p.getValue(); } else { return null; } } 참조: https://cafe.naver.com/thisisjava/14898 이것이 자바다 13제네릭 4번문제 대한민국 모임의 시작.. 2019. 9. 2.
Thread상태상수인 WAITING, BLOCKED와 상태제어 메소드인 wait()과 notify()의 관계 이것이 자바다 - 12장 멀티스레드 - 스레드 상태 제어 notify()메소드와 wait()메소드는 스레드에서 사용하는 것이 아니라 공유객체에서만 사용된다. 스레드 상태중에 일시정지를 의미하는 상수로 WAITING, BLOCKED, TIMED-WAITING이 있다. 상태를 중심으로 생각해보면, TIMED-WAITING은 sleep()메소드를 사용하면 이뤄지는 상태변화이다. WAITING은 wait()메소드나 join()메소드를 사용하면 이뤄지는 상태변화이다. BLOCKED는 공유객체의 synchronized메소드나 synchronized블록을 수행하는 스레드가 있는 상황에서 이 공유객체에 접근하는 다른 스레드들이 얻게되는 상태변화이다. 이제 거꾸로 wait()메소드나 notify()메소드 같이 메소드를 .. 2019. 9. 1.
Future<T> submit(Runnable task, T result)는 무엇을 리턴하나? 이것이 자바다 - 12장 멀티스레드 - 리턴값이 있는 작업 완료 통보 책에서 Runable은 작업에 리턴값이 없을때 사용하고, Callable은 작업에 리턴값이 있을 때 사용한다고 한다. submit(Runnable task) future.get() -> null future.get() -> 예외 발생 submit(Runnable task, Integer result) future.get() -> Integer 타입 값 future.get() -> 예외 발생 submit(Callable task) future.get() -> String 타입 값 future.get() -> 예외 발생 그러나 책에서 제공하는 위의 표에 가운데에 있는 있는 submit은 Runnable임에도 불구하고 두번째 파라미터가 re.. 2019. 8. 31.
CompletionService의 take()의 용도 이것이 자바다 - 12장 멀티스레드 작업 - 완료 순으로 통보 스레드 풀의 스레드가 꼭 의도한 작업처리를 위해서만 사용된다는 관점에서 벗어나서 다른 작업들의 완료된 작업을 콘솔로 출력하는 코드도 작업으로 만들어 스레드 풀의 작업큐에 넣으므로써 스레드풀의 스레드가 결과 값을 받아 내는 작업을 실행하도록 한다. 즉, 기존에 ExcutorService의 get()만으로 사용하던 방식에서는 Future future1 = excutorService.submit(task1, result); Future future2 = excutorService.submit(task1, result); result = future1.get(); result = future2.get(); future2 작업이 먼저 끝났다 하더라도 .. 2019. 8. 30.