java thread 4

[Java] 외부에서 스레드를 안전하게 종료하는 방법

프로젝트를 진행하면서 Thread를 활용해야 하는 작업을 진행하고 있었다. 그러면서 특정 조건에서 Thread를 죽여야만 하는 상황이 존재했는데 어떻게 하면 외부에서 Thread를 죽일 수 있는지에 대해 고민하고 있었다. Thread의 run 내부에서는 보통 while true를 활용해서 무한 루프를 돌기 마련인데 이걸 특정 Flag를 활용해서 while true 가 아니라 while !flag 와 같은 식으로 while 문을 돌면서 flag 를 검사해주는 방식으로 할 지에 대해 고민했다. 결국에는 외부에서 해당 Thread 내에 있는 boolean stop flag 변수에 접근해서 해당 변수의 값을 바꿔주었고 while로 무한 루프를 돌던 Thread는 해당 stop flag 값이 true가 되었음을 ..

Java 2022.11.30

[Java] Java project Loom and Virtual Threads

최근 커뮤니티에서 많이 언급되는 주제가 있다. 바로 Java project Loom 의 Virtual Threads 이다. 최근 뜨거운 감자인데 어느 정도는 알아둬야겠다고 생각해서 간단하게 내용을 살펴보고자 한다. 우선 프로젝트 룸이란 무엇일까? The primary goal of Project Loom is to support a high-throughput, Lightweight concurrency model in java. 즉 자바의 동시성 모델에서 가벼우면서도 고성능을 지원할 수 있게 하는 프로젝트라고 볼 수 있다. OpenJDK에 의해서 시작되었다고 한다. Project Loom에 대해서 언급하기 이전에 먼저 자바의 동시성 모델에 대해 간략하게 알고 가는 것이 좋다. Thread는 다바의 동시..

Java 2022.11.16

[Java] 공유객체와 volatile 키워드

공유객체란 무엇일까? 공유객체는 하나의 객체를 여러 개의 Thread가 사용한다는 의미이다. volatile은 무엇일까? volatile은 해당 키워드로 선언된 변수를 컴파일러의 최적화 대상에서 제외시킨다는 의미이다. 그래서 값이 변경되는 즉시 변수에 적용시킨다. 그런데 하나의 Thread가 아닌 여러 Thread가 Write하는 상황에서는 적합하지 않다고 한다. Java에서 volatile은 Java 변수를 Main Memory에 저장하겠다는 것을 명시하는 키워드이다. 그래서 변수의 값을 읽을때 CPU 캐시에 저장된 값이 아니라 Main Memory에서 읽게 되는 것이다. 그리고 마찬가지로 변수의 값을 쓸때도 Main Memory에까지 작성하는 것이다. 왜 volatile 키워드가 필요할까? volat..

Java 2021.01.05

[이것이 자바다] 자바 쓰레드 공부 정리

한빛미디어에서 펴낸 "이것이 자바다" 책에 대한 강의가 유튜브에 올라와있는데, 상당히 친절하게 깊게 설명해준다. 조금 오래되긴 했는데, 그 점과는 별개로 내용이 좋다. 쓰레드 관련 강의부분에 대한 코드와 필기 내용을 올려둔다. 새로 접한 내용이 많아서 재밌다. Create Thread package sec02.exam01_createthread; import java.awt.Toolkit; public class BeepPrintExample1 { public static void main(String[] args) { //비프음을 5번 반복해서 소리나게 하는 작업. Toolkit toolkit = Toolkit.getDefaultToolkit(); for(int i = 0;i

Java 2020.12.20