Java 3

동시성 문제와 동기화(synchronized)

동시성 문제두개 이상의 스레드가 공유자원을 여러 단계로 나누어 이용할 때 동시성 문제가 일어난다.   '잔액'이라는 공유자원을 사용하고 로직을 (1)잔액 확인 (2)잔액 출금 으로 나누어져있을 때  [한 번에 여러개의 스레드 실행할 경우]    한 스레드가 공유자원인 잔액의 값을 (2)출금 로직에서 변경했을 때    다른 스레드에서는 '잔액'을 처음으로 설정한 값을 기준으로(변경되지 않은 값을 기준으로) 검증을 하면 원치 않는 결과 초래 15:38:50.830 [ t2] 거래 시작 : BankAccountV115:38:50.830 [ t1] 거래 시작 : BankAccountV115:38:50.840 [ t1] [검증 시작] 출금액 : 800, 잔액 : 100015:38:..

JAVA 2024.11.24

스레드와 Yield

여러 스레드가 동시에 접근하는 경우 동시성 컬렉션{ java.util.concurrent 패키지} 및 동시성 변수 volatile을 사용하는 것이 안전하다.  ConcurrentLinkedQueue : QUEUE 상속, concuurent 패키지 / 여러 스레드에 의해 자료구조가 수정될 수 있음volatile : 동시에 실행되는 여러 스레드에 의해 필드가 수정될 수 있음을 나타냄package thread.control.printer;import java.util.Queue;import java.util.Scanner;import java.util.concurrent.ConcurrentLinkedQueue;import static util.MyLogger.log;import static util.Threa..

JAVA 2024.11.18

스레드 인터럽트

1. InterruptInterrupt - 1. 인터럽트를 사용하지 말고, 무한루프 스레드의 작업을 중단시키는 방법  아래  work 스레드를 중단하는데에 가장 쉬운 방법은 work스레드 작업에 변수를 지정하고,실행하는 메인 스레드에서 그 변수를 조작하는 것이다 [ while(true) -> while(false) ]그런데, 이런 방법은 sleep으로 초를 맞춰서 중단시키는거라,특정스레드가 끝나자마자 바로 중단하는게 아니라 sleep()이 있으면 sleep()이 끝난다음에 중단을 할 수 있다.↓  work 스레드 2번째 작업 시작하고 1초 지난 뒤(main스레드가 sleep(4000)에서 깨어나는 시점)에 while(false)를 인식하고 작업이 끝나면(2초뒤에) work 스레드가 작업을 끝냄21:46:..

JAVA 2024.10.31