본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

(360)
java.util.function패키지: BiConsumer<T, U> BiPredicate<T, U> BiFunction<T, U, R> 매개변수가 두개인 함수형 인터페이스는 이름앞에 Bi란 접두사가 붙는다. 이 외 두개 이상의 매개변수를 갖는 함수형인터페이스가 필요하다면 직접 만들어 써야한다. BiConsumer `accept(T t, U u)` 메서드를 호출해 두 개의 입력값을 받고 소비 import java.util.function.BiConsumer; public class Main { public static void main(String[] args) { // BiConsumer를 이용하여 두 개의 정수를 더하여 출력하는 예시 BiConsumer adder = (a, b) -> System.out.println("Sum: " + (a + b)); // BiConsumer에 두 개의 정수를 전달하여 더한 결과를 출력 adder.a..
java.util.function패키지: java.lang.Runnable Supplier<T> Consumer<T> Function<T, R> Predicate<T> java.util.function패키지 일반적으로 자주쓰이는 형식의 메서드를 함수형 인터페이스로 정의해논 패키지. https://standout.tistory.com/1433 { for (int i = 0; i < 5; i++) { System.out.println("Hello from thread: " + Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; // Runnable 객체를 이용하여 새로운 스레드 생성 및 실행 Thread thread = new Thread(task); thread.start(); System.out.pri..
하나의 작업을 작은 단위로 나눠서 여러 스레드가 동시에 처리한다, fork & join 프레임웍 fork & join 프레임웍 fork & join 프레임웍은 하나의 작업을 작은 단위로 나눠서 여러 스레드가 동시에 처리하는것을 쉽게 만들어준다. RecursiveAction과 RecursiveTask 두 클래스 중에서 하나를 상속받아 구현한다. RecursiveAction 반환값이 없는 작업할때 RecursiveTask 반환값이 있는 작업할때 Fork-Join 프레임워크는 작업을 병렬로 처리함으로써 성능을 향상시키고, 멀티코어 프로세서에서의 활용도를 높인다. Fork-Join 프레임워크의 핵심 구성 요소는 다음과 같다. 1. ForkJoinPool: Fork-Join 작업을 실행하는 스레드 풀 2. ForkJoinTask: Fork-Join 프레임워크의 작업을 나타내는 추상 클래스 3. Recursi..
volatile, 공유 변수의 가시성을 보장하다 `volatile` 키워드는 자바에서 멀티스레드 환경에서 공유 변수의 가시성을 보장하기 위해 사용된다. `volatile`로 선언된 변수는 메인 메모리에서 직접 읽기 및 쓰기가 이루어지며 스레드가 변수를 읽을 때마다 항상 가장 최신의 값이 제공된다. 이를 통해 스레드 간의 변수 값의 일관성을 유지할 수 있다. 예시 코드에서는 `volatile` 키워드가 적용된 `flag` 변수를 사용하여 두 개의 스레드가 서로 상태를 공유한다. 스레드 1은 `toggleFlag()` 메서드를 호출하여 `flag` 값을 변경하고, 스레드 2는 `isFlag()` 메서드를 호출하여 `flag` 값을 확인한다. `flag` 변수가 `volatile`로 선언되었기 때문에 스레드 2에서는 항상 스레드 1에서 변경한 가장 최신의 ..
스레드의 동기화 lock클래스: ReentrantLock, ReentrantReadWriteLock, StampedLock 앞서 synchronized 블럭 동기화를 알아볼때 lock패키지에 대한 언급을 했었다. https://standout.tistory.com/1428 synchronized 를 이용한 스레드의 동기화 스레드의 동기화란. 한 스레드가 특정작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것. 자바에서는 synchronized블럭을 이용해서 스레드의 동기화를 지원했지만 jsk1.5부터 java.u standout.tistory.com lock클래스의 종류는 3가지가 있다. ReentrantLock ReentrantReadWriteLock StampedLock ReentrantLock `ReentrantLock`을 사용하여 공유 자원에 대한 접근을 동기화한다. `increment()` 메서드에서 ..
synchronized 동기화를 보완하다, wait()과 notify() 락을 가진 상태로 오랜시간 유지하지않도록 앞서 sunchronized로 동기화해서 공유데이터를 보호했다. https://standout.tistory.com/1428 synchronized 를 이용한 스레드의 동기화 스레드의 동기화란. 한 스레드가 특정작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것. 자바에서는 synchronized블럭을 이용해서 스레드의 동기화를 지원했지만 jsk1.5부터 java.u standout.tistory.com 그러나 특정 스레드가 객체의 락을 가진 상태로 오랜시간 유지하지않도록 하는것도 중요하다. wait과 notify는 공기화된 임계영역의 코드를 수행하다 작업이 더이상 진행할 상황이 아닐경우, 일단 wait을 호출하여 스레드가 락을 반납하고 기다리게한다. 이후 작업을 수행할 수 있는 상황이 되..
synchronized 를 이용한 스레드의 동기화 스레드의 동기화란. 한 스레드가 특정작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것. 자바에서는 synchronized블럭을 이용해서 스레드의 동기화를 지원했지만 jsk1.5부터 java.util.concurrent,locks와 java.util.concurrent,atomic패키지를 통해 다양한 방식의 동기화가 가능하다. 예시에서 `Counter` 클래스의 `increment` 메서드와 `decrement` 메서드는 `synchronized` 키워드를 사용하여 동기화된다. 이를 통해 여러 스레드가 동시에 `increment` 또는 `decrement` 메서드를 호출할 때, 스레드 간 경쟁이 발생하지 않고 안전하게 카운터 값을 조작할 수 있다. class Counter { private..
스레드의 스케줄링/실행제어, 스레드의 상태를 지정하다. 스레드의 실행제어 스레드 프로그래밍은 어렵다. 동기화, 스케줄링때문인데 앞서 우선순위를 통해 스레드간의 스케줄링을 하는 방법이 있었으나, 한참 부족하다. https://standout.tistory.com/1422 스레드의 우선순위 setPriority() 앞서 스레드를 생성하여 start해 봤다. https://standout.tistory.com/1421 스레드 구현과 실행 + 싱글쓰레드와 멀티쓰레드: start()와 run() 앞서 스레드에 대해 알아봤다. 프로세스는 공장이라면 스레드는 일 standout.tistory.com 스레드의 스케줄링과 관련된 메서드는 다음과 같다. static void sleep(long millis) 현재 실행 중인 스레드를 주어진 시간(밀리초) 동안 일시 정지시킵니다..