목록Records/TIL (7)
지우너
코드트리 90xp 프로그래머스정보처리기사 실기김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
코드트리 90xp 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 스레드가 동시에 공유하는 자원에 접근해서 값을 바꾸면 동시성 문제가 발생.여러 스레드가 동시에 접근하면 데이터 불일치나 예상치 못한 결과가 발생할 수 있는 부분을 임계영역이라고 함.공유 변수나 공유 객체를 수정하는 경우
코드트리 90xp 정보처리기사실기 강의김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성프린트 하다가 잘못된 문서를 뽑을 경우 급하게 프린트를 멈춰야 하는 경우가 있다.Queue(ConcurrentLinkedQueue)에 들어간 문자를 순서대로 출력하는 Runnable을 만든다.main에서 입력받은 문자를 해당 스레드의 Queue에 넣어줌. 처음에는 volatile boolean work=true; 라는 변수를 만들어서 종료해야할 때 해당 플래그를 false로 바꿔줬다→반응성이 좋지 않음. 프린트가 된 다음 작업을 멈추게 됨interrupt()를 하면 즉시 작업을 멈춤. while에서 Thread.interrupted()체크를 하면 반응성을 높여줄 수 있음.yield() 다른 스레드한테 cpu를 양보..
코드트리 90xp 정보처리기사실기 강의김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성join()해당 스레드가 작업을 끝낼 때까지 기다리게 하는 함수.join(time)이렇게 time을 매개변수로 넣어주면 TIMED_WAITING 상태가 된다. join()을 하면 WAITING상태가 됨.join을 쓰는 이유sleep을 이용해 어떤 스레드의 작업이 끝나기를 기다려도 되지만, 작업이 어느 정도의 시간이 걸릴지 예측하는 것은 어렵다.인터럽트를 사용하면 대기 중인 (sleep이나 join 중인) 스레드를 바로 깨울 수 있다(RUNNABLE이 됨). 스레드의 인터럽트 상태를 단순히 확인만 하는 용도라면 isInterrupted()를 사용하면 된다.인터럽트 상태를 직접 체크할 때는 Thread.inerrupt..