minuco
article thumbnail
스레드 (Thread) - 제어
Android/java 2021. 2. 26. 23:46

스레드를 생성하고 시작하려면 스레드는 다양한 상태를 가지게 됩니다. 스레드의 상태는 자동으로 변경되거나 코드로 변경해서 제어할 수 있는데요. 이번 시간에는 스레드 제어에 대해서 알아보겠습니다. 스레드 상태 우선 스레드의 실행 흐름을 그림으로 알아보겠습니다. 스레드 객체를 생성하고 start() 메서드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 됩니다. 실행 대기상태란 언제든지 실행할 준비가 되어있는 상태를 말합니다. 운영체제는 실행 대기 상태에 있는 하나의 스레드를 선택하고 CPU가 run () 메서드를 실행상태로 만듭니다. 실행 상태의 스레드는 run() 메서드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있고, 실행 대기 상태에 있는 다른 스레드 중에서 하나를 선택해 실행 상태..

article thumbnail
스레드 (Thread) - 동기화 메소드 (2)
Android/java 2021. 2. 24. 22:18

동기화 메서드 지난 시간에는 스레드 A를 사용하는 중 스레드 B를 사용하면 스레드 B가 스레드 A의 상태를 변경시켜버려 의도하지 않았던 결과를 얻었는데요, 이를 방지하기 위한 방법을 알아보겠습니다! 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어서 다른 스레드가 사용할 수 없도록 해야 합니다. 멀티 스레드에서 단 하나의 영역을 실행할 수 있는 영역을 임계 영역이라 하는데 자바는 임계 영역을 지정하기 위해 동기화 메서드를 제공합니다. 내부의 동기화 메서드를 실행하면 즉시 객체에서 잠금을 걸어 다른 스레드가 동기화 매소드를 실행하지 못하게 해요! 그 방법을 설명드리겠습니다. 동기화 메서드를 만들려면 메서드 선언부에 synchronized 키워드를..

article thumbnail
스레드 (Thread) - 동기화 메소드 (1)
Android/java 2021. 2. 23. 23:58

싱글 스레드 프로그램에서는 1 개의 스레드가 객체를 독차지해서 사용하면 되지만, 멀티스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있습니다. 이때 여러 스레드에서 동시에 한 객체에 접근할 수 있게 되면, 한 스레드에 의해 변경된 객체의 상태가 다른 스레드의 작업에 영향을 미쳐서 의도치 않은 결과를 낼 수 있습니다. 공유 객체를 사용할 때의 주의할 점 멀티 스레드 프로그램에서 스레드들이 객체를 공유해서 작업해야 하는 경우, 스레드 A가 사용하던 객체를 스레드 B가 상태를 변경할 수 있기 때문에 스레드 A가 의도했던 것과는 다른 결과를 산출할 수도 있습니다. User1 스레드가 Calculator 객체의 memory 필드에 100을 먼저 저장하고 2초간 일시정지 상태가 됩니다. 그동안..

스레드 (Thread) 하위클래스
Android/java 2021. 2. 21. 23:56

안녕하세요 오늘은 스레드(Thread) 2편입니다. 지난번 시간에 스레드란? 에서 Runnable로 스레드를 만들어 보았는데요. 지난 시간 내용입니다 :) 스레드 (Thread) 란? 우선 스레드를 공부하기 전 알고 넘어가야 할 개념이 있는데 프로세스(process)입니다. 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 시행되는데, 이것을 프로세스 itminco.tistory.com 오늘은 Thread를 하위 클래스로부터 생성해 보겠습니다. 작업 스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용을 포함시킬 수 있습니다. Thread 클래스를 상속한 후 run() 메서드를 재정의(Overriding)해서 스레드가 ..