Java의 동기화(synchronized, wait(), notify())
·
JVM/Java
안녕하세요. 오늘은 자바의 동기화에 대해서 알아보려고 합니다.자바의 동기화에 대해서 알려면, 모니터, synchronized 키워드, wait() 메서드, notify() 메서드를 잘 이해해야 합니다.모니터모니터란?자바는 모니터를 이용해서 동기화를 지원합니다. 이 모니터는 자바의 각 객체마다 하나씩 소유하고 있습니다.그렇다면, 모니터란 뭘까요? 모니터는 뮤텍스, 세마포어 같은 동기화 방식의 추상화된 동기화 방식이라고 할 수 있습니다.간단하게 뮤텍스/세마포어의 방식을 알아볼까요?public void run() { lock() // do something unlock()}이런 방식으로 임계 영역을 접근하기 전에 명시적으로 잠금과 해제를 선언하는 방식입니다. 반면, 모니터의 경우는 아래와 같은 방식입니다.pu..
Java Virtual Thread 사용하는 방법
·
JVM/Java
안녕하세요. 이전 글에서 Java Virtual Thread에 대해서 알아보았습니다. 오늘은 가상 스레드를 실제로 사용하는 방법에 대해서 알아보겠습니다. Java의 Virtual Thread에 대해서(JEP444)안녕하세요. 오늘은 자바의 가상 스레드(Virtual Thread)에 대해서 알아보겠습니다. 이 가상 스레드는 JDK21에서 정식으로 추가된 기능입니다.기존 Thread의 한계 기존에 사용되던 자바의 스레드는 플woodding.tistory.com사용하는 방법은 간단합니다. startVirtualThread()Runnable runnable = () -> { try { Thread.sleep(10000); System.out.println(Thread.current..
Java의 Virtual Thread에 대해서(JEP444)
·
JVM/Java
안녕하세요. 오늘은 자바의 가상 스레드(Virtual Thread)에 대해서 알아보겠습니다. 이 가상 스레드는 JDK21에서 정식으로 추가된 기능입니다.기존 Thread의 한계 기존에 사용되던 자바의 스레드는 플랫폼 스레드(Platform Thread)라고 불립니다. 이 플랫폼 스레드는 OS의 커널 스레드(Kernel Thread)와 1대 1로 매핑되는 형태입니다. 그렇다면 플랫폼 스레드는 커널 스레드가 가진 단점을 그대로 가지고 있다는 것입니다.커널 스레드의 단점은 아래와 같습니다.OS가 스케줄링을 할 때 발생하는 컨텍스트 스위칭(Context Switching)의 비용이 많다.일반적으로 하나의 스레드마다 메모리 1MB를 스택을 위해 할당된다.저희가 흔히 알고 있는 자바의 스프링 프레임워크(Spring..
Java에서 MessageDigest를 이용해서 해시코드 생성하기 (SHA-256, SHA-512, MD5)
·
JVM/Java
안녕하세요. 오늘은 String을 해시 코드로 변환해보겠습니다. 일반적으로 해시는 비밀번호 저장 시에 많이 사용되죠? 이것을 자바에서 어떻게 사용하는지 알아봅시다.MessageDigest저희는 java.security 패키지의 `MessageDigest` 클래스를 사용할 겁니다.var algorithm = "SHA-256";var md = MessageDigest.getInstance(algorithm);이렇게 하면 MessageDigest 객체를 얻을 수 있습니다. 사용 가능한 해시 함수 알고리즘은 아래와 같습니다.(공식 문서)MD2MD5SHA-1SHA-224SHA-256SHA-384SHA-512SHA-512/224SHA-512/256SHA3-224SHA3-256SHA3-384SHA3-512문자열을 해..