개발/Java(10)
-
동기화
LockSupportSynchronized는 한계가 있다.무한 대기공정성따라서 Java 1.5부터 concurrent 패키지가 추가되었고 그 중에 LockSupport에 대해 알아보자LockSupportpark() : 스레드를 WAITING 상태로 변경한다.parkNanos(nanos) : 스레드를 나노초 동안만 TIMED_WAITING 상태로 변경한다.unpark(thread) : WAITING 상태의 대상 스레드를 RUNNABLE 상태로 변경한다.WAITING 또는 TIMED_WAITING 상태를 RUNNABLE로 변경하는 방법은 2가지가 있다.LockSupport.unpart(thread)thread.interrupt()public class LockSupportMain { public sta..
2024.10.05 -
스레드 제어와 생명 주기
스레드 그룹thread.getThreadGroup() 하면 나오는게 스레드 그룹이다. 스레드 그룹은 스레드를 그룹화하여 관리할 수 있다. 기본적으로 모든 스레드는 부모 스레드와 동일한 스레드 그룹에 속하게 된다.스레드 그룹은 여러 스레드를 하나의 그룹으로 묶어서 특정 작업(예: 일괄 종료, 우선순위 설정)을 수행할 수 있다.스레드 상태NEW : 스레드가 아직 시작되지 않은 상태RUNNABLE : 스레드가 실행 중이거나 실행 가능한 상태BLOCKED : 스레드가 동기화 락을 기다리는 상태WAITING : 스레드가 다른 스레드의 특정 작업이 완료되기를 기다리는 상태TIMED_WAITING : 일정 시간동안 기다리는 상태TERMINATED : 스레드가 실행을 마친 상태main 스레드가 thread1, thre..
2024.10.02 -
JVM 메모리 영역
public class Main { public static void main(String[] args) { ExampleClass exampleClass = new ExampleClass(); int sum = exampleClass.sum(5, 10); }}public class ExampleClass { private int a; private int b; public int sum(int a, int b) { return a + b; }}1단계: Main클래스 로드Main 클래스가 처음 실행되면, JVM은 클래스 로더를 통해 .class 파일을 메소드 영역(Method Area)으로 로드한다. 상수 풀(Constant Pool)..
2024.09.29 -
멀티스레드와 동시성
멀티태스킹CPU가 매우 빠르게 여러 프로그램의 코드를 번갈아 수행하는 것(여러 작업을 수행하는 능력)소프트웨어 기반멀티프로세싱둘 이상의 프로세서(CPU 코어)를 사용하여 여러 작업을 동시에 처리하는 기술하드웨어 기반스케쥴링운영체제가 CPU에 어떤 프로그램을 얼마만큼 실행해야 할지 결정하는 것CPU를 최대한 활용할 수 있는 다양한 우선순위와 최적화 기법 사용여러 프로세스의 스레드가 스케쥴링 큐에 쌓이고 큐에 쌓인 순서대로 실행이 된다.코어가 많을수록 코어 수만큼의 스케쥴링 큐에 스레드가 쌓여서 더 빨리 실행이 된다.프로세스프로그램은 코드로 이루어진 파일프로그램을 실행하면 프로세스각 프로세스는 독립적인 메모리 공간을 갖고 있다. 운영체제는 별도의 작업 단위로 분리해서 관리된다. 각 프로세스는 별도의 메모리 ..
2024.09.24