Java 16

멀티 Thread 동기화

critical section과 semaphorecritical section은 두 개 이상의 스레드가 동시에 접근하는 경우 문제가 생길 수 있기 때문에 동시에 접근할 수 없는 영역이다semaphore는 특별한 형태의 시스템 객체이며 get, release 두 개 기능이 있다한 순간에 하나의 스레드만 semaphore를 얻을 수 있고, 나머지 스레드들은 대기 상태가 된다semaphore를 얻은 스레드는 critical section에 접근할 수 있다동기화두 개의 스레드가 같은 객체에 접근할 경우, 동시에 접근해서 오류가 발생한다동기화는 임계영역에 접근한 경우 공유 자원을 lock 하여 다른 스레드의 접근을 제어한다동기화를 잘못 구현하면 데드락에 빠질 수 있다synchronized자바에서는 임계영역에 동시..

Java 2024.08.22

Thread 클래스의 여러 메소드

Thread 우선순위Thread.MIN_PRIORITY = 1 ~ Thread.MAX_PRIORITY = 10디폴트 값은 Thread.NORMAL_PRIORTY = 5우선순위가 높은 스레드가 CPU 배분을 받을 확률이 높다public class PriorityThread extends Thread { @Override public void run() { int sum = 0; Thread t = Thread.currentThread(); System.out.println(t + " start"); for (int i = 0; i 결과는 다음과 같다반드시 그런건 아니지만 우선순위가 높은 스레드들이 먼저 끝나는 것을 볼 수 있다join()동시에 두..

Java 2024.08.15

여러가지 보조 스트림

보조 스트림실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림이다FilterInputStream, FilterOutputStream이 보조 스트림의 상위 클래스다생성자의 매개변수로 또 다른 스트림(기반 스트림이나 다른 보조 스트림)을 가진다InputStreamReader, OutputStreamWriter바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림이다FileInputStream으로 읽은 자료를 문자로 변환하는 예제다import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;public class InputStreamReaderTest { public static void..

Java 2024.08.10

Thread 만들기

Thread프로세스실행 중인 프로그램이다.프로그램이 실행되면 운영체제로부터 메모리를 할당받아 프로세스가 된다스레드하나의 프로세스는 하나 이상의 스레드를 가진다.실제 작업을 수행하는 단위는 스레드다multi-thread여러 스레드가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과스레드는 자신만의 작업 공간을 가진다 (context)스레드 사이에서 공유하는 자원이 있다 (자바에서는 static instance)여러 스레드가 자원을 공유하는 경우, 서로 자원을 차지하려는 race condition이 발생할 수 있다여러 스레드가 경쟁하는 자원을 critical section이라고 한다critical section에 대한 동기화를 구현하지 않으면 오류가 발생할 수 있다Thread 만들기Thread ..

Java 2024.08.08

Wrapper 클래스

Wrapper 객체객체 지향 프로그래밍에서는 모든 것들을 객체로 다뤄야 한다하지만 성능상의 이유로 현실과 타협할 수밖에 없는 경우가 있다지금까지 다음과 같은 원시 타입을 사용했고, 이들을 객체화할 수 있다Primitive Data TypeWrapper ClasscharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBooleanchar, int, long과 같은 데이터 타입은 실제로 값 이상의 의의를 가지지 않기 때문에, 비용이 많이 드는 객체 대신 원시 타입을 사용한다자바는 기본형들을 추상화해서 객체화는 했지만, 값 이상의 의의를 가지지 않으면 성능상의 이유로 원시 값을 그대로 사용한다객체로의 기능이 필요할 때 원시 값..

Java 2024.05.21

스레드

1. 프로세스와 스레드프로세스 vs 스레드프로세스: 운영체제로부터 자원을 할당받는 작업의 단위스레드: 프로세스가 할당받은 자원을 이용하는 실행 단위프로세스프로세스는 실행 중인 프로그램을 의미한다OS 위에서 실행되는 모든 프로그램은 OS가 만들어 준 프로세스에서 실행된다프로세스 구조OS가 프로그램 실행을 위한 프로세스를 할당해 줄 때 프로세스 안에서 Code, Data, 메모리 영역(Stack, Heap)을 할당해준다Code는 Java main 메소드와 같은 코드를 말한다Data는 프로그램이 실행 중 저장할 수 있는 저장공간을 의미한다전역변수, 정적 변수 등 초기화 된 데이터를 저장하는 공간Memory 메모리 영역Stack: 지역변수, 매개변수 리턴 변수를 저장하는 공간Heap: 프로그램이 동적으로 필요한..

Java 2024.05.20