본문 바로가기

java/개념68

스레드 동기화(Thread Synchronization) 스레드 동기화 필요성 멀티스레드는 여러 작업을 동시에 실행하는 응용프로그램 작성 기법이다. 이때 다수의 스레드가 공유 자원이나 공유 데이터에 동시에 접근하는 경우 여러 스레드의 출력값들이 뒤섞여 표시되는 등 예상치 못한 문제가 발생할 수 있다. 따라서 멀티스레드 프로그램을 작성할 때는 다수의 스레드가 공유 데이터에 접근하는 경우에 대한 처리를 해 주어야 하며, 이것이 스레드 동기화(Thread Synchronization)이다. 스레드 동기화는 공유 데이터에 접근하려는 다수의 스레드가 순서대로 충돌 없이 배타적으로 공유 데이터에 접근하기 위해 상호 협력(cooperate)하는 것이다. 공유 데이터에 대한 접근은 배타적이고 독점적으로 이루어져야 하며, 공유 데이터를 독점적으로 다루는 프로그램 코드를 임계 .. 2024. 11. 28.
스레드 종료 스레드는 스스로 종료하거나 다른 스레드에 의해 강제 종료될 수 있으며, 종료된 스레드를 다시 살릴 수 없다. 스스로 종료메소드가 실행 중 또는 완전히 실행한 후 return하면 스레드가 종료된다.void run(){ ... return; //스스로 종료 ...} 강제 종료 - interrupt()종료하고자 하는 스레드의 interrupt() 메소드를 호출하면 스레드가 종료된다. 스레드 A가 스레드 B를 강제 종료시키고자 하는 경우, 스레드 A가 스레드 B의 interrupt()를 호출해야 한다.B.interrupt();스레드 B의 interrupt()가 호출되면 B 스레드에 InterruptedException 예외가 발생하는데, 이때 try-catch문에서 catch 루틴이 실행되어 retu.. 2024. 11. 28.
스레드 생명 주기와 스케줄링 스레드 상태 스레드는 생명 주기(life cycle)동안 여러 상태의 변이(NEW, RUNNABLE, TIMED_WAITING, BLOCK, WAITING, TERMINATED)를 거친다.1. NEW(생성): 스레드가 생성되었으나 아직 실행할 준비가 되지 않은 상태new Thread()에 의해 NEW 상태의 스레드가 생성됐을 때 이 스레드는 스케줄링되지 않아 실행될 수 없는 상태이다. 이때 스케줄링이란 JVM이 RUNNABLE 상태의 스레드 중 하나를 선택하여 실행시키는 것이며, start() 메소드가 호출되면 스레드는 RUNNABLE 상태로 전환된다. 2. RUNNABLE(준비): 스레드가 현재 실행되고 있거나 실행 준비되어 스케줄링을 기다리는 상태start() 메소드가 호출되어 NEW에서 RUNNAB.. 2024. 11. 28.
스레드 만들기 자바 스레드를 만들기 위해서 개발자가 해야 하는 작업은 아래와 같다.스레드 코드 작성JVM에세 스레드를 생성하고 스레드 코드를 실행할 것을 요청스레드 코드를 작성하기 위해서 Thread 클래스를 이용하거나 Runnable 인터페이스를 사용할 수 있다.Thread 클래스를 상속받아 스레드 만들기 ※ Thread 생성자  ※ Thread 주요 메소드void run()스레드 코드, 반드시 Overriding하여 스레드 코드 작성void start()JVM에게 스레드 실행 시작 요청void interrupt()스레드 강제 종료static void yield()다른 스레드에게 실행을 양보, 이때 JVM은 다른 스레드를 선택하여 스케줄링void join()스레드 종료까지 대기long getId()스레드의 ID 값 .. 2024. 11. 19.
자바의 멀티스레딩 멀티스레드와 JVM- 자바에는 프로세스가 존재하지 않고 스레드 개념만 존재- JVM은 멀티스레딩만 지원- 자바 스레드(java thread): JVM에 의해 스케줄되는 실행 단위 코드 블록자바 응용프로그램의 실행 과정1. 사용자가 자바 응용프로그램을 실행2. JVM이 먼저 실행3. JVM이 자바 응용프로그램을 로딩하여 실행4. 자바 응용프로그램 종료5. JVM도 함께 종료- 하나의 JVM은 하나의 자바 응용프로그램만 실행(* 이때 응용프로그램이란 main() 함수를 의미한다)- 한 컴퓨터에서 n개의 자바 응용프로그램이 실행될 때 n개의 JVM이 실행, 각각의 자바 응용프로그램은 별개의 메모리 영역에서 독립적으로 실행- 2개 이상의 자바 응용프로그램을 실행하려면 위와 같이 실행되어야 함- n개의 자바 응용.. 2024. 11. 19.
멀티태스킹 멀티태스킹 프로그램- 큰 규모의 응용 프로그램은 여러 작업(task)을 동시에 실행하는 경우 多- 응용프로그램의 여러 task가 동시에 진행되도록 하는 멀티태스킹 기법 사용스레드(thread): OS 혹은 JVM(Java Virtual Machine)에서 task 실행의 단위- thread of control- 프로그램 코드를 실행하는 하나의 실 혹은 제어의 개념- task마다 하나의 스레드가 생성되며, 하나의 스레드로 하나의 task만 처리 可- 스레드들은 상호 독립적- OS나 JVM에 의해 관리됨멀티태스킹과 멀티스레딩 멀티프로세싱(multi-processing)- 하나의 응용 프로그램을 여러 개의 프로세스(process)로 구성, 각 프로세스가 하나의 task를 처리하도록 하는 기법- 각 프로세스는 .. 2024. 11. 19.