전체 글
-
wait(), notify()Java/Java 문법 종합반 강의 정리 2024. 1. 3. 19:57
침범을 막은 코드(synchronized)를 수행하다가 작업을 더 이상 진행할 상황이 아니면, wait()을 호출하여 쓰레드가 Lock을 반납하고 기다리게 할 수 있다. - 그럼 다른 쓰레드가 락을 얻어 해당 객체에 대한 작업을 수행할 수 있게 되고, - 추후에 작업을 진행할 수 있는 상황이 되면 notify()를 호출해서, - 작업을 중단했던 쓰레드가 다시 Lock을 얻어 진행할 수 있게 된다. 1. wait() : 실행 중이던 쓰레드는 해당 객체의 대기실(waiting pool)에서 통지(notify)를 기다린다 2. notify() : 해당 객체의 대기실(waiting pool)에 있는 모든 쓰레드 중에서 임의의 쓰레드만 통지를 받는다. 예제를 통해 두 메서드의 활용법을 알아보자 public cla..
-
join, yield, synchronizedJava/Java 문법 종합반 강의 정리 2024. 1. 3. 17:42
join() : 정해진 시간동안 지정한 쓰레드가 작업하는 것을 기다린다. - 시간을 지정하지 않았을 때는 지정한 쓰레드의 작업이 끝날 때 까지 기다린다. join 사용방법 Thread thread = new Thread(task, "thread"); thread.start(); try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } - Thread.sleep(ms), ms(밀리초) 단위로 설정된다. - 예외처리를 해야한다. - interrupt() 를 만나면 기다리는 것을 멈추기 때문에 InterruptedException 이 발생할 수 있다. - 시간이 지정하지 않았기 때문에 thread가 작업을 끝낼 때 까지 mai..
-
쓰레드의 상태와 제어Java/Java 문법 종합반 강의 정리 2024. 1. 3. 16:31
쓰레드 상태 - 이처럼 쓰레드는 실행과 대기를 반복하며 run() 메서드를 수행한다. - run() 메서드가 종료되면 실행이 멈추게 된다. - 음악을 듣다 일시정지 하는 것과 마찬가지로, 쓰레드도 일시정지 상태를 만들 수 있다.(2) - 일시정지 상태에서는 쓰레드가 실행을 할 수 없는 상태가 된다. - 쓰레드가 다시 실행 상태로 넘어가기 위해서는 우선 일시정지 상태에서 실행대기상태로 넘어가야 한다.(3) 아래는 쓰레드의 상태를 정리한 표이다. 상태 Enum 설명 객체생성 NEW 쓰레드 객체 생성, 아직 start() 메서드 호출 전의 상태 실행대기 RUNNABLE 실행 상태로 언제든지 갈 수 있는 상태 일시정지 WAITING 다른 쓰레드가 통지(notify) 할 때 까지 기다리는 상태 일시정지 TIMED..
-
데몬 쓰레드, 쓰레드 우선순위, 쓰레드 그룹Java/Java 문법 종합반 강의 정리 2024. 1. 3. 12:46
데몬 쓰레드 : 보이지 않는 곳(background) 에서 실행되는 낮은 우선순위를 가진 쓰레드를 말한다. - 보조적인 역할을 담당하며 대표적인 데몬 쓰레드로는 메모리 영역을 정리해주는 가비지 컬렉터(GC)가 있다. 데몬 쓰레드 사용법 public class Main { public static void main(String[] args) { Runnable demon = () -> { for (int i = 0; i < 1000000; i++) { System.out.println(i + "번째 demon"); } }; Thread thread = new Thread(demon); thread.setDaemon(true); // true로 설정시 데몬스레드로 실행됨 thread.start(); for ..
-
쓰레드 사용법Java/Java 문법 종합반 강의 정리 2024. 1. 3. 12:16
Tread 클래스를 상속받는 방법 run 메서드를 Override 하여 쓰레드에서 수행할 작업을 정의한다. main 에서 인스턴스와 시켜 .start 로 run 메서드를 실행 시킬 수 있다. Runnable 인터페이스를 구현하는 방법 동일하게 run 메서드에서 쓰레드가 수행할 작업을 정의한다. Runnable 인터페이스의 구현체로 TestRunnalbe 을 선언하고, 그 객체로 다시 Thread 를 선언한다. 실행 방법 또한 동일하게 start() 로 할 수 있다. - 앞서 사용한 Thread 를 직접 상속받아 사용하는 방법이 더 간단해 보이지만, 실제로는 위 방법이 더 많이 사용된다. - 클래스와 인터페이스의 차이 때문에, Thread 를 상속받는 방법은 확장성이 매우 떨어지기 때문이다. - 반대로 R..
-
멀티 쓰레드Java/Java 문법 종합반 강의 정리 2024. 1. 3. 11:28
싱글 쓰레드 : 프로세스 안에서 하나의 쓰레드만 실행되는 것을 말한다. - Java 프로그램의 경우 main() 메서드만 실행시켰을 때 이것을 싱글 쓰레드 라고 한다. - 지금까지 실습한 Java프로그램들은 main() 메서드만 실행시켰기 때문에 모두 싱글 쓰레드로 실행되고 있다. - Java 프로그램 main() 메서드의 쓰레드를 '메인 쓰레드' 라고 부른다. - JVM 의 메인 쓰레드가 종료되면, JVM 도 같이 종료된다. 멀티 쓰레드 : 프로세스 안에서 여러개의 쓰레드가 실행되는 것을 말한다. - 하나의 프로세스는 여러개의 실행단위(쓰레드)를 가질 수 있으며, 이 쓰레드들은 프로세스의 자원을 공유한다. - Java 프로그램은 메인 쓰레드외에 다른 작업 쓰레드들을 생성하여 여러개의 실행 흐름을 만들 ..
-
프로세스와 쓰레드Java/Java 문법 종합반 강의 정리 2024. 1. 3. 11:16
프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위 프로세스 작업 단위 - 프로세스는 "실행 중인 프로그램"을 의미한다. - 예를들어 우리가 Java 프로그램을 실행시키면 이 프로그램은 프로세스라는 이 름으로 운영체제 위에서 실행된다. - 즉, OS 위에서 실행되는 모든 프로그램은 OS가 만들어준 프로세스에서 실행된다. 프로세스 구조 - OS가 프로그램 실행을 위한 프로세스를 할당해줄 때, 프로세스안에 프로그램 Code와 Data 그리고 메모리 영역(Stack, Heap)을 함께 할당해준다. 1. Code 는 Java main 메소드와 같은 코드를 말한다. 2. Data 는 프로그램이 실행중 저장할 수 있는 저장공간을 의미한다. - 전역변수,..
-
제네릭의 개념Java/Java 문법 종합반 강의 정리 2024. 1. 2. 19:37
Generic 은 두가지 단어가 합쳐져 있다고 볼 수 있다 generalised : 일반화된 genetic : 유전적인 제네릭의 효용 - 첫 번째로 제네릭의 효용은 타입 언어에서 "중복되거나 필요없는 코드를 줄어주는 것" 이다. - 두 번째 제네렉의 효용은 그러면서도 타입 안정성을 해치지 않는 것 이다. 자바스크립트나 파이썬과 같은 약타입 언어를 이용한다면 간단하다. 기본적으로 타입을 지정 해 줄 필요가 없기에 하나의 함수만 구현하면 끝 이다. function plusReturnFunction(a, b) { return a + b; } const a = 1; const b = 2; const c = 1.1; const d = "hello"; plusReturnFunction(a + b); // 3 plu..