본문 바로가기

jvm9

Java 에서 동시성 문제 해결하기 멀티스레딩 환경에서의 문제 중 하나는 공유 자원에 대한 동시 접근에서 발생하는 데이터 불일치와 예기치 못한 동작이다. 이번 포스팅에서는 Java에서 메모리 가시성과 동시성 문제의 차이점을 이해하고, 이를 해결하기 위한 여러 가지 방법을 살펴보려고 한다. 문제의 기본 구조 아래는 두 스레드가 동일한 BankAccount 인스턴스를 공유하면서 출금을 시도하는 예제이다.public class BankMain { public static void main(String[] args) throws InterruptedException { BankAccount account = new BankAccountV1(1000); Thread t1 = new Thread(new WithdrawT.. 2025. 2. 20.
Java Thread 중단과 제어: Sleep, interrupt, Yield 이해하기 Java에서 멀티스레딩을 사용하다 보면, 스레드를 중단하고 제어하는 것이 자주 필요하다. 이를 위한 여러 가지 기법이 존재하지만, interruption(인터럽트)와 yield(양보)는 매우 중요한 개념이다. 본 포스팅에서는 이 두 개념을 중심으로 적용 예제를 통해 보다 깊이 이해해보자.주어진 시간동안 일시 정지하기 위한 sleep 실행 중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 sleep() 메소드를 사용하면 된다. Thread.sleep()메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간다.try{ Thread.sleep(1000);}catch(InterruptedException e){ e.printStackTrace.. 2025. 2. 20.
Java 에서 스레드와 생명 주기 정리 Java에서 스레드는 멀티스레딩 프로그래밍의 기본 단위로, 스레드의 상태와 생명 주기를 이해하는 것은 효율적인 프로그래밍을 위한 기초가 된다. 이 포스트에서는 이에 대한 이해를 위해 스레드의 생명 주기, 상태, 예외 처리, 그리고 join() 메서드의 사용에 대해 정리해보려고 한다.스레드 기본 정보스레드 ID: 각 스레드는 고유한 식별자인 ID를 가짐스레드 이름: 스레드는 이름을 가질 수 있으며, 중복 가능우선순위: 1부터 10까지의 값으로 설정되며 기본값은 5!!  실제 우선순위는 JVM 구현 및 운영체제에 의해 결정 됨스레드 그룹: 스레드는 부모 스레드와 동일한 그룹에 속하며, 그룹화하여 관리할 수 있음스레드 상태: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING,.. 2025. 2. 10.
Java Thread & Runnable 정리 Java에서 스레드를 사용하는 것은 멀티태스킹을 구현하는 중요한 방법이다. 이전 포스팅에 이어서 이번에는 Java 에서 스레드를 활용하는 아주 기본적인 방법을 공유해보고자 한다. Thread 스택 영역  OS의 원리와 유사하게, 프로세스는 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 구성된다. 이때 각 프로세스의 스레드는 자신만의 스택 영역을 가지며, 힙, 데이터, 코드 영역은 공유하여 사용한다. 자바 또한 JVM 아래에서 이러한 구조를 유지하며, 각각의 스레드는 독립적인 스택 영역을 갖는다. Java 에서 Thread 클래스public class HelloThread extends Thread { @Override public void run() { System.out.p.. 2025. 2. 7.
Java 에서 Exception 예외처리(Exception Handling) 은 프로그래밍에 안정성을 높일 때 가장 중요한 기능이라고 할 수 있다. 이번 포스팅에서는 예외 처리가 왜 필요한지, 자바에서는 어떻게 예외 계층을 관리해주고 있는지, Check Exception 과 Unchecked Exception 에 대해서 설명하고자 한다.왜 예외 처리가 필요할까? 예외 처리가 필요한 이유는 I/O 작업과 같이 외부 시스템에 의존하는 작업에서 예상하지 못하는 오류가 발생했을 때, 빠르게 대응하기 위함이다. 예를 들어 네트워크 통신 과정에서 (1) 메시지를 전송 도중 (2) 네트워크 연결 과정에서 등등 실패할 수 있는 상황들이 다양하다.package exception.ex1;public class NetworkService { publ.. 2025. 2. 4.
Java 에서 다형성과 객체지향 프로그래밍 다형성(Polymorphism)은 객체지향 프로그래밍(OOP)의 주요 원칙 중 하나로, 동일한 메서드가 여러 다른 형태로 동작할 수 있도록 하는 기능이다. 이를 통해 코드의 유연성과 확장성을 높일 수 있다. 이번 포스팅에서는 다형성의 두 가지 핵심 개념인 "다형적 참조"와 "캐스팅", "OCP" 에 대해 살펴보겠다.다형적 참조 다형적 참조는 부모 클래스 타입의 변수가 자식 클래스 객체를 참조할 수 있는 기능을 의미한다. 이를 통해 부모 클래스에서 정의된 메서드는 호출할 수 있지만, 자식 클래스의 메서드는 직접 호출할 수 없다.class Parent { public void parentMethod() { System.out.println("Parent method"); }}class.. 2025. 1. 29.
반응형