Back-end/Java(13)
-
[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) 활용 예제
자바 스트림을 활용하여 간단한 코드를 작성해보자 예제 정의 어떤 온라인 게임에 전투력 10,000을 넘어야 입장할 수 있는 던전이 있다. 그리고 여러 명의 유저가 파티를 맺으면 전투력을 합칠 수 있다. 유저 세명이 파티를 맺었다고 했을 때 전투력 계산과 유저 검색 등에 대한 연산을 스트림을 활용하여 구현해보자. 유저에 대한 클래스를 만들고 배열로 유저를 관리한다. 파티를 맺은 유저 세명의 정보는 다음과 같다. user1 name : 몰입맨 level : 10 power : 3000 user2 name : 코딩맨 level : 20 power : 4000 user3 name : 코딩걸 level : 15 power : 3500 유저 클래스 public class User { private String na..
2022.02.26