자바(11)
-
[Java] 스레드(Thread) - wait(), notify() 활용 예제
리소스가 어떤 조건에서 더 이상 유효하지 않은 경우 리소스를 기다리기 위해 Thread가 wait() 상태가 된다 wait() 상태가 된 Thread는 notify()가 호출될 때까지 기다린다 유효한 자원이 생기면 notify()가 호출되고 wait()하고 있는 Thread 중 무작위로 하나의 Thread를 재시작한다 notifyAll()이 호출되는 경우 wait() 하고 있는 모든 Thread가 재시작된다 notifyAll()이 호출되는 경우 유효한 리소스만큼의 Thread만이 수행되며 자원을 갖지 못한 Thread는 다시 wait() 상태로 돌아간다 자바에서는 notifyAll() 메서드의 사용을 권장한다 도서관에 자리가 부족해 기다리는 경우를 가장한 코딩 예제 notify()를 사용하는 경우 imp..
2022.02.27 -
[Java] 멀티 스레드 동기화(multi-threaded synchronization)
임계 구역(critical section)과 세마포어(semaphore) critical section은 여러 개의 thread가 동시에 접근할 수 없는 영역이다 semaphore는 특별한 형태의 시스템 객체이며 get/release 두 개의 기능이 있다 한 순간 오직 하나의 thread 만이 semaphore를 얻을 수 있고 나머지 thread들은 대기(blocking) 상태가 된다 semaphore를 얻은 thread 만이 critical section에 들어갈 수 있다 Kh 클래스와 Ys 클래스가 동시에 Bank 클래스에 접근하는 예제 package ch22; class Bank { private int money = 5000; public synchronized void saveMoney(int ..
2022.02.27 -
[Java] 스레드(Thread) 종료하기 예제
무한 반복하는 스레드를 만들고 종료하는 예제를 작성해보자. 세 개의 thread를 만든다 'A'를 입력받으면 첫 번째 thread를 종료한다 'B'를 입력받으면 두 번째 thread를 종료한다 'C'를 입력받으면 세 번째 thread를 종료한다 'M'을 입력받으면 모든 thread와 main() 함수를 종료한다 무한 반복의 경우 while(flag)의 flag 값을 false로 바꿔서 반복문을 나간다. 스레드 종료하기 예제 import java.io.IOException; public class TerminateThread extends Thread { private boolean flag = false; int i; public TerminateThread(String name) { super(name..
2022.02.27 -
[Java] 스레드(Thread) 우선순위 - (MIN, NORM, MAX)_PRIORITY
자바 Thread 클래스에는 스레드의 우선순위를 정할 수 있는 메서드가 있다. Thread.MIN_PRIORITY(=1) ~ Thread.MAX_PRIORITY(=10) 디폴트 우선순위 : Thread.NORM_PRIORITY(=5) 우선순위가 높아진다고 무조건 높아지는 것이 아니라 높아질 확률이 올라가는 것이다 setPriority() / getPriority() Thread 우선순위 예제 class PriorityThread extends Thread { public void run() { Thread t = Thread.currentThread(); System.out.println(t + "start"); System.out.println(t.getPriority() + "end"); } } pu..
2022.02.27 -
[Java] 스레드(Thread) 개념 정리 - sleep(), wait(), join()
스레드의 개념 프로세스(process)란? 프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 스레드(thread)란? 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다. 멀티 스레딩(multi-threading) 하나의 프로세스 내에서 둘 이상의 th..
2022.02.27 -
[Java] 자바에서 예외(Exception) 처리를 하는 이유
프로그램을 만들다 보면 많은 오류가 발생한다. 자바는 안정성을 중요시하는 언어로 프로그램이 정상적으로 작동하게 하기를 위하는 것이다. 하지만 때로는 이러한 오류를 무시하고 싶을 때도 있고, 오류가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다. 그래서 자바는 try_catch, throw 구문을 이용해 오류를 처리한다. 프로그램 오류 컴파일 오류(compile error) : 프로그램 코드 작성 중 발생하는 문법적 오류 - 최근에는 개발 환경(IDE)에서 대부분의 컴파일 오류를 알려준다 실행 오류(runtime error) : 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 오류 - 프로그램이 비정상적으로 종료되는 경우 시스템에 심각한 장애를 발생시킬 수 있다 예외 처리의 중..
2022.02.26 -
[Java] 스트림(Stream)
스트림(Stream)이란? 자료의 대상과 관계없이 동일한 연산을 수행한다 배열, 컬렉션을 대상으로 연산을 수행한다 일관성 있는 연산으로 자료 처리를 쉽고 간단하게 한다 자료 처리에 대한 추상화가 구현되어있다 한번 생성하고 사용한 스트림은 재사용할 수 없다 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모된다 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 한다 만약 한번 사용한 스트림을 재사용하면 java.lang.IllegalStateException: stream has already been operated upon or closed (스트림이 이미 작동되었거나 닫혔습니다) 이렇게 에러가 나는 것을 확인할 수 있다 int[] arr = {1,2,3}; int sum = Arrays...
2022.02.24