전체 글
-
함수형 인터페이스공부/Java 2024. 5. 17. 17:48
함수형 인터페이스 - 단 하나의 추상 메서드만 선언된 인터페이스※ @FunctionalInterface를 붙여주면 함수형 인터페이스가 올바른지 확인해주니 붙여주면 좋다. (추상 메서드가 한 개로 개수가 맞는지 등)@FuctionalInterfaceinterface MyFuntion { public abstract int max(int a, int b);}MyFunction f = new MyFuntion() { public int max(int a, int b) { return a > b ? a : b; }};int value = f.max(3, 5);위 예제에서 value에 값이 정상적으로 들어가게 된다.MyFuntion 리모콘에는 max()가 있기 때문이다.- 함수형 인터페이스 타입..
-
람다식(Lambda Expression)공부/Java 2024. 5. 16. 19:45
람다식(Lambda Expression) - 함수(메서드)를 간단한 식(expression)으로 표현하는 방법- 함수를 간략하면서도 명확하게 표현할 수 있게 한다.- 메서드를 람다식으로 표현할 때 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명 객체'라고도 한다.※ 람다식을 다루기 위한 참조변수가 필요하다. ※ 함수와 메서드의 차이- 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어- 함수는 클래스에 독립적, 메서드는 클래스에 종속적이다. 람다식 작성하기1. 메서드의 이름과 반환타입을 제거하고, '->'를 블록{} 앞에 추가한다.2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능 (끝에 ';' 안 붙임)3. 매개변수의 타입이 추론 가능하면 생략가능 (대부분의 경우..
-
wait(), notify()공부/Java 2024. 5. 14. 17:38
wait(), notify() - 동기화의 효율을 높이기 위해 사용한다.※ 동기화로 데이터를 보호하는 것은 좋지만 해당 락을 기다리느라 다른 효율이 떨어지기 때문- Object 클래스에 정의되어 있으며, 동기화 블럭 내에서만 사용할 수 있다.wait() - 객체의 lock을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.notify() - waiting pool에서 대기중인 쓰레드 중 하나(지정불가)를 깨운다.notifyAll() - waiting pool에서 대기중인 모든 쓰레드를 깨운다. wait()으로 사용하려는 쓰레드의 lock을 풀어야지만 사용할 수 있다.하려고 하는 동작을 수행한 후 notify()를 사용하면, 쓰레드가 다시 lock을 획득한다.이러면 데이터는 보호되면서도 쓰레드가..
-
쓰레드의 동기화(synchronization)공부/Java 2024. 5. 13. 19:20
쓰레드의 동기화(synchronization) - 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.- 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요하다.쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것 - 동기화하려면 간섭받지 않아야 하는 문장들을 '임계 영역'으로 설정한다.- 임계 영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입 가능하다. (객체 1개에 락 1개) synchronized(키워드)를 이용한 동기화- synchronized로 임계영역(lock이 걸리는 영역) 설정하는 방법1. 메서드 전체를 임계 영역으로 지정하기public synchronized void calcSum() { // ....}2...
-
join(), yield()공부/Java 2024. 5. 13. 16:37
join(), yield() join()- 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다.void join() // 작업이 모두 끝날 때까지void join(long millis) // 천분의 일초 동안void join(long millis, int nanos) // 천분의 일초 + 나노초 동안 - 예외처리를 해야 한다.※ InterruptedException이 발생하면 작업을 재개한다. yield()- 남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기한다.- static 메서드로, 자기 자신에게만 사용할 수 있다.- yield()와 interrupt()를..
-
suspend(), resume(), stop()공부/Java 2024. 5. 12. 18:07
suspend(), resume(), stop() - 각각 쓰레드의 실행을 일시정지, 재개, 완전정지 시킨다.void suspend() 쓰레드를 일시정지 시킨다.void resume() suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.void stop() 쓰레드를 즉시 종료시킨다. - suspend(), resume(), stop()은 교착상태(deadlock)에 빠지기 쉬워서 deprecated되었다.※ deprecated는 전에는 사용되었지만 앞으로는 사용하지 않을 것을 권장하는 것이다. 하위 호환성을 위해 삭제하지 않는 것일 뿐, 사용하지 않는 것이 좋다.
-
sleep(), interrupt()공부/Java 2024. 5. 10. 19:44
sleep(), interrupt() sleep()- 현재 쓰레드를 지정된 시간동안 멈추게(잠들게) 한다.- static 메서드라서 항상 현재 쓰레드에서만 동작한다. 사용 방법static void sleep(long millis) // 천분의 일초 단위static void sleep(long millis, int nanos) // 천분의 일초 + 나노초 - 예외처리를 해야 한다. (InterruptedException이 발생하면 깨어남)- 특정 쓰레드를 지정해서 멈추게 하는 것은 불가능하다. interrupt()- 대기상태(WAITING)인 쓰레드를 실행대기 상태(RUNNABLE)로 만든다. interrupt()와 관련된 메서드는 아래와 같다...
-
쓰레드의 상태와 실행제어공부/Java 2024. 5. 9. 16:54
쓰레드의 상태와 실행제어 쓰레드의 상태상태설명NEW쓰레드가 생성되고 아직 start()가 호출되지 않은 상태RUNNABLE실행 중 또는 실행 가능한 상태BLOCKED동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)WAITING, TIMED_WAITING쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지상태.TIMED_WAITING은 일시정지시간이 지정된 경우를 의미TERMINATED쓰레드의 작업이 종료된 상태 쓰레드의 실행제어- 쓰레드의 실행을 제어할 수 있는 메서드가 제공된다.메서드설명static void sleep(long millis)static void sleep(long millis, int nanos)지정된 시간(천분의 일초 단위)동안..