분류 전체보기223 [Java] 람다식(Lambda expression)과 함수형 인터페이스(Functional Interface) 람다식이란 람다식은 메서드를 하나의 '식(expression)'으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환타입이 없어지므로, '익명함수(anonymous function)'이라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr ,(i) -> (int)(Math.random()*5) +1); 위의 문장에서, () -> (int)(Math.random()*5) +1); 부분이 람다식이다. 이러한 람다식을 통해 보다 간결하고 이해하기 쉬워졌고, 메서드를 변수처럼 다루는 것이 가능해진다. 람다식 작성하기 반환타입 메서드이름 (매개변수 선언){ 문장들 } // 람다 (매개변수 선언) -> { 문장들 } 반환 타입과 메서드이름을 없애고, 매개변수가 수행.. 2022. 3. 16. [알고리즘 문제풀이] 백준 2613 숫자구슬 (JAVA코드) https://www.acmicpc.net/problem/2613 2613번: 숫자구슬 첫째 줄에 구슬의 개수 N과 그룹의 수 M이 주어진다. 둘째 줄에는 각 구슬이 적혀진 숫자가 왼쪽부터 차례로 주어진다. N은 300 이하의 자연수, M은 N이하의 자연수이며, 구슬에 적혀진 숫자는 100 www.acmicpc.net import java.util.*; import java.io.*; /** * 1. 이분탐색으로 최대값의 크기를 지정 * * 2. 그에 따른 그룹으로 나누기(각 그룹별 개수 체크) * * 3. 최대값이 최소가 될 때 출력 */ public class 숫자구슬 { public static int n,m, result; public static int[] groupList, beads; pub.. 2022. 3. 16. [Java] 쓰레드 8 - fork & join 프레임 워크 fork & join 프레임워크 이 프레임워크는 멀티쓰레드 프로그래밍을 구현하기 위해 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어준다. 수행할 작업에 따라 아래의 두 클래스 중에서 하나를 상속받아 구현한다. RecursiveAction : 반환값이 없는 작업을 구현할 때 사용 RecursiveTask : 반환값이 있는 작업을 구현할 때 사용 두 클래스 모두 compute()라는 추상 메서드를 가지고 있고, 이 추상 메서드를 구현하면 된다. 1) compute()에 작업을 수행하기 위한 코드 넣기 2) 쓰레드풀과 수행할 작업 생성 3) invoke()로 작업 시작. 쓰레드풀은 지정된 수의 쓰레드를 생성해서 미리 만들어 놓고 반복해서 재사용할 수 있게 한다. 쓰레드를 반.. 2022. 3. 14. [Java] 쓰레드 7 - volatile volatile 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 그러다보니 도중에 메모리에 저장된 변수의 값이 변경되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생한다. 그럴 때 변수 앞에 volatile을 붙이면, 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어온다. boolean suspended = false; // volatile volatile boolean suspended = false; volatile을 붙이는 대신에 synchronized블럭을 사용해도 같은 효과를 얻을 수 있다. 쓰레드가 블럭에 들어갈 때와 나올 때, 캐시.. 2022. 3. 14. [Java] 쓰레드 6 - 쓰레드 동기화(synchronized , Lock, Condition) 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 여러 쓰레드가 자원을 공유해서 작업하기 때문에 서로에게 영향을 줄 수 있다. 이러한 일을 방지하기 위해 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 '쓰레드 동기화(Synchronization)'라고 한다. synchronized를 이용한 동기화 // 1. 메서드 전체를 임계 영역으로 지정 public synchronized void calcSum(){ // ... } // 2. 특정 영역을 임계 영역으로 지정 synchronized(객체의 참조변수){ // ... } 임계영역이란 둘 이상의 프로세스(쓰레드)가 공유 데이터에 접근하여 작업하는 코드 블록. 2022.01.05 - [CS/OS(운영체제)] - 동기화 툴(프로세스 동기화) .. 2022. 3. 14. [Java] 쓰레드 5 - 쓰레드의 실행제어(sleep, interrupt, join, yield) 쓰레드의 스케줄링 관련 메서드 메서드 설 명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간(천분의 1초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다. void interrupt() sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 In.. 2022. 3. 14. [Java] 쓰레드 4 - 데몬 쓰레드(daemon thread) 데몬 쓰레드 데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다. 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 이에 속함 데몬 쓰레드는 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다. 데몬 쓰레드 설정방법 일반 쓰레드와 작성방법과 실행방법이 같음 쓰레드 생성 후 실행전에 setDaemon(true)를 호출해야함. boolean isDaemon() : 쓰레드가 데몬쓰레드인지 확인하여 boolean값 반환. void setDaemon(boolean on) : 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경. 매개변수 on의 값을 true로 지정하면 데몬 쓰레드가 된다. class ThreadE.. 2022. 3. 14. [Java] 쓰레드 3 - 쓰레드 우선순위와 쓰레드 그룹 우선순위 지정 쓰레드는 우선순위를 통해 각 쓰레드 별 작업시간을 다르게 가지게 할 수 있다. void setPriority(int newPriority) : 쓰레드의 우선순위를 지정한 값으로 변경한다. void getPriority() : 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10 // 최대우선순위 public static final int MIN_PRIORITY = 1 // 최소우선순위 public static final int NORM_PRIORITY = 5 // 보통우선순위 쓰레드가 가질 수 있는 우선순위 범위는 1~10이며 숫자가 높을수록 우선순위가 높다. 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드로부터 상속받는다. main메서드를 수.. 2022. 3. 14. 이전 1 ··· 6 7 8 9 10 11 12 ··· 28 다음