Development/Java(853)
-
스레드 그룹 생성, 그룹에 새로운 스레드 추가하기
스레드 그룹 생성· 명시적으로 스레드 그룹을 만들 경우 아래의 생성자 중 하나를 이용하여 ThreadGroup 객체를 만들 수 있습니다.· ThreadGroup 이름만 주거나, 부모 ThreadGroup 과 이름을 매개값으로 해서 스레드 그룹을 생성할 수 있습니다. Thread thread = new Thread(ThreadGroup group, String name); Thread thread = new Thread(ThreadGroup group, Runnable target); Thread thread = new Thread(ThreadGroup group, Runnable target, String name); Thread thread = new Thread(ThreadGroup group, Ru..
-
ReentrantLock 클래스, ReentrantLock 클래스 생성자, 동기화 메소드
ReentrantLock 클래스· 가장 일반적인 lock입니다. · 특정 조건일 때 lock을 풀고 나중에 다시 lock을 얻어 임계역역으로 들어와서 이후의 작업을 수행할 수 있기 때문에 앞에 reentrant(재진입할 수 있는)키워드가 붙었습니다.· ReentrantLock은 배타적인 lock이라서 무조건 lock이 있어야만 임계영역의 코드를 수행할 수 있습니다. 지금까지 배운 lock의 방식과 일치합니다. ReentrantLock 클래스 생성자· 생성자의 매개변수(fair)를 true로 주면, lock이 풀렸을 때 가장 오래 기다린 쓰레드가 lock을 획득하도록 처리합니다. 즉, 공정(fair)상태.· 공정하게 처리하려면 어떤 쓰레드가 가장 오래 기다렸는지 확인하는 과정이 추가적으로 필요하므로 성능은..
-
lock 인터페이스, lock 클래스 종류
lock 인터페이스· JDK 1.5 부터 추가된 동기화 방법· synchroized블럭을 이용한 동기화는 자동적으로 lock이 걸리고 풀리기 때문에 synchronized블럭 내에서 예외가 발생해도 lock이 자동으로 풀립니다. 즉, 같은 메소드내에서만 lock을 걸 수 있습니다. 이런 제약이 불편할 경우 lock 인터페이스를 구현한 클래스를 사용하면 됩니다. Interface Lockhttps://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html lock 클래스 종류
-
스레드 그룹 정보 얻기 - getThreadGroup(), Thread.getAllStackTraces()
스레드 그룹 정보 얻기 · getThreadGroup() · Thread.getAllStackTraces() getThreadGroup() 현재 스레드가 속한 스레드 그룹의 이름을 얻고 싶을 때 사용하는 메소드입니다. Map map = Thread.getAllStackTraces();
-
동기화 방법-synchronized - 메서드의 동기화 방법(synchronized기반 동기화 메소드), 특정 블록의 동기화 방법(synchronized기반 동기화 블록)
동기화 방법-synchronizedJAVA에서 임계코드를 동기화하기 위해서 제공하는 구문으로 2가지 방법이 있습니다.아래의 두 방법 모두 lock의 획득과 반납과정은 모두 자동으로 이루어지기 때문에 임계 영역만 잘 설정해주면 됩니다.· 메서드의 동기화 방법(synchronized기반 동기화 메소드)· 특정 블록의 동기화 방법(synchronized기반 동기화 블록) 메서드의 동기화 방법(synchronized기반 동기화 메소드)· synchronized 선언으로 인해서 synchronizedMethod메소드는 쓰레드에 안전한 함수가 됩니다. 메소드 전체가 임계 영역으로 설정됩니다.· synchronizedMethod가 호출되면 해당 메소드가 포함한 객체의 lock을 얻어 작업을 수행하다가 해당 메소드가 ..
-
Thread의 메모리 구조
Thread의 메모리 구조 모든 스레드는 스택영역을 제외한 메소드 영역(클래스 영역)과 힙영역을 공유합니다. 따라서 이 두 영역을 통해서 데이터를 공유할 수 있습니다. 스택영역은 스레드 별로 독립적 으로 존재하게 되는 이유는 스레드의 실행이 메소드의 호출을 통해서 이뤄지고, 메소드의 호출을 위해서 사용되는 메모리 공간이 스택영역이기 때문입니다.