728x90
반응형

thread 7

[Java] Thread Local

ThreadLocal 스레드 단위로 로컬 변수를 사용할 수 있다는 장점이 있습니다. 또한 여러 메서드를 전역변수처럼 사용할 수 있습니다. 다만 다른 스레드와 변수가 공유되지 않도록 주의해야 합니다. ThreadLocalMap private 클래스로 구성되어 있어 외부에서 접근할 수 없고, 내부적으로 해시 테이블 정보를 갖고 있는데, 요소는 WeakReference를 확장하고 ThreadLocal 객체를 키로 사용하는 Entry 클래스입니다. Thread ThreadLocalMap를 타입 멤버 필드로 가지고 있는데, 특정 스레드의 정보를 TreadLocal에서 직접 호출 할 수 있도록 합니다. ThreadLocal의 withInital 메서드 쓰레드 로컬 변수를 생성하면서 특정 값으로 초기화하는 메서드입니..

JAVA 2022.10.24

[OS] Process Management (3) _ 쓰레드, 쓰레드 동기화, 세마포어

쓰레드 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스는 한 개 이상의 쓰레드가 존재하며, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다. 멀티 쓰레드 쓰레드들이 서로 스위칭 하면서 작업을 처리함으로써 CPU 사용률을 향상시켜주고, 자원을 보다 효율적으로 사용할 수 있습니다. 또한 사용자에 대한 응답성이 높고, 작업이 분리되어 코드가 간결해집니다. 하지만 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화, 교착상태 같은 문제를 조심해야 합니다. 쓰레드 구현 [Java] Thread Thread 하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다. CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 ..

Backend/OS 2022.07.31

[Java] Thread Synchronization

Thread Synchronization 두 개의 쓰레드가 동일한 객체에 접근을 하려고 할 때 공유 자원을 lock하여 다른 쓰레드가 접근하지 못하게 합니다. 그래서 두 개의 쓰레드가 공유자원에 동시에 접근하여 발생하는 문제를 없앨 수 있습니다. Thread Synchronization Problem package Java.thread.syncronizedEx; import static java.lang.Thread.sleep; class Bank{ private int money = 10_000; public void saveMoney(int save){ int curMoney = getMoney(); try { sleep(3000); } catch (InterruptedException e) { th..

JAVA 2022.07.29

[Java] Thread Method : join()

Join() Method 쓰레드가 실행될 때 쓰레드가 종료될 때까지 기다린 후 다른 쓰레드를 실행시키거나 메인 함수를 실행해야하는 경우가 있습니다. 이때 Thread.join()을 사용해서 해당 쓰레드가 종료 될 때까지 Non-Runnable 상태로 만들 수 있습니다. Join() 구현 package Java.thread; public class ThreadJoinTest extends Thread{ int start; int end; int total; //멤버변수는 초기화하지 않아도 0으로 자동 초기화됩니다. public ThreadJoinTest(int start, int end) { this.start = start; this.end = end; } public void run(){ //로직 fo..

JAVA 2022.07.29

[Java] Priority Thread

각각의 쓰레드의 우선순위를 정해서 실행시킬 수 있습니다. package Java.thread; //쓰레드 우선순위를 설정해주는 예제 class PriorityThread extends Thread{ @Override public void run(){ int sum = 0; //쓰레드 작업 시작 Thread thread = Thread.currentThread(); System.out.println(thread + " start !!"); //0~100_000까지 더하기 for (int i = 0; i < 100_000; i++) { sum += i; } //쓰레드 작업 종료 System.out.println(thread.getPriority() + " end !!"); } } public class Pr..

JAVA 2022.07.29

[Java] Thread

Thread 하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다. CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 CPU의 실행 단위는 쓰레드입니다. 즉 쓰레드가 CPU를 차지하면 프로세스가 수행됩니다. 쓰레드는 각자의 작업공간인 Context 값을 가집니다. 각 쓰레드들이 공유해서 사용하는 Shared Resource가 있습니다. 각 쓰레드들이 동시에 Shared Resource에 접근할 때 문제가 생길 수 있습니다. 그래서 공유 자원은 임계영역(critical section) 이라고 하는데 이 영역을 한 쓰레드가 사용할 때 다른 쓰레드는 못쓰게 합니다. 이를 동기화라고 합니다. 자바에서는 syncronized, syncronizedBlock이 있다. 쓰레드 상태 Ru..

JAVA 2022.07.29
728x90
반응형