본문 바로가기

thread4

[Java] Multi Thread환경에서 동시성 제어를 하는 방법 스레드(Thread)란 무엇일까요? 스레드가 무엇인지 설명하기 위해서는 그 상위 단위인 프로세스에 대해 이해할 필요가 있습니다. 일반적으로 특정 작업을 수행하는 소프트웨어를 우린 프로그램이라고 부릅니다. 이러한 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 부릅니다. 스레드는 이 프로세스를 구성하는 하나의 단위입니다. 하나의 프로세스에는 여러 스레드가 작동하고 있을 수 있겠네요. 스레드는 작업의 한 단위입니다. 프로세스는 독자적인 메모리를 할당받아서 서로 다른 프로세스끼리는 일반적으로 서로의 메모리 영역을 침범하지 못합니다. 하지만 프로세스 내부에 있는 여러 스레드들은 서로 같은 프로세스 내부에 존재하고 있기 때문에 같은 자원을 공유하여 사용할 수 있습니다. 같은.. 2020. 6. 6.
[java] 스레드(Thread)[4] - 스레드의 상태(state) 제어 스레드는 생성부터 종료까지 여러 상태 값들을 가집니다. 스레드는 크게 4가지의 상태를 가집니다. 스레드의 상태 1. ready state : start() 메서드 호출부터 스케줄러가 run() 메서드를 시작하기까지의 상태입니다. 2. run state : 스레드가 ready state이고, 스케줄러가 run() 메서드를 실행시키면 해당 스레드는 run state 상태가 됩니다. 3. non-runnable state : run state상태인 스레드가 동작을 일시 정지한 상태입니다. non-runnable state에는 3가지의 상태(wating, sleeping, blocked)가 있습니다 3-1 : wating state : synchronized 메서드나 synchronized 블록에 의해 스레드가.. 2019. 7. 27.
[java] 스레드(Thread)[3] - 스레드 우선순위를 설정하는 방법 스레드를 여러개 제작하여 실행하면 여러 메서드를 병행적으로 실행할 수 있어서 프로세스의 성능을 높일 수 있지만, 스케줄러의 프로세스 실행 상황에 따라 예측 하기가 어렵습니다. 스레드가 먼저 시작했다고 우선순위를 가지는 것도 아니고, 먼저 시작한 스레드가 더 늦게 끝날 수도 있습니다. 또한 자원 상황에 따라 스레드가 실행되지 못하고 대기 상태로 남아있을 수도 있습니다. 그렇기 때문에 스레드의 중요도에 따라 우선순위를 정하는 것이 필요합니다. 하지만 이 스레드의 우선순위는 다중 cpu 환경, 또는 멀티코어 환경에서는 무의미합니다. 우선순위를 정하고 싶다면 join() 메서드를 사용하는 것을 권장드립니다 이 예제의 실행환경은 멀티코어 스레드이기 때문에, 실행 결과보다는 설정 방법을 확인하는 용도로 참고만 해주.. 2019. 7. 27.
[java] 스레드(Thread)[2] - Runnable을 이용하여 구현하는 방법 스레드를 만드는 방법 중 black-box 방법으로 알려진 Runnable 인터페이스를 구현하는 방법에 대해 알아보겠습니다. 스레드를 만드는 방법은 white-box방법과 black-box방법이 있습니다. white-box방법은 java.lang.Thread 객체를 extend하여 만드는 것이고, black-box 방법은 java.lang.Runnable 인터페이스를 implements 하여 만드는 것입니다. white-box방식으로 제작한 스레드는 컴파일 타임 시점에 형식이 결정되어 동적인 기능 변경이 불가능하다는 단점이 있습니다. 반면 스레드를 Runnable객체로 만들게 되면 스레드를 상속받아 만드는 white-box방식에 비해 어플리케이션의 유연성과 확장성을 보장받을 수 있게 됩니다. Runnab.. 2019. 7. 27.