JAVA/Language(48)
-
[Java][Thread] 쓰레드의 실행 제어
쓰레드의 스케줄링과 관련된 메서드 메서드 설명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간동안 쓰레드를 일시정지시킴. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 됨 void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 합니다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속합니다. void interrupt() sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만듭니다. 해당 쓰레드에서는 InterruptedE..
2022.06.30 -
[Java][Thread] 데몬 쓰레드(daemon thread)
1. 데몬 쓰레드는 무엇인가? 데몬 쓰레드는 다른 일반 쓰레드(데몬 쓰레드가 아닌 쓰레드)의 작업을 돕는 보조적인 역할을 수행하는 쓰레드입니다. 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료됩니다. 대표적인 데몬 쓰레드로는 가비지 컬렉터, 워드프로세서의 자동저장, 화면 자동갱신 등이 존재합니다. 데몬 쓰레드의 특징 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 종료됨 데몬 쓰레드는 무한루프와 조건문을 이용해서 실행후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기함 데몬 쓰레드를 생성하기 위해서는 쓰레드를 생성한 다음 setDaemon(true)를 호출하여 생성함 데몬 쓰레드가 생성한 쓰레드는 자동적으로 데몬 쓰레드가 됨 데몬 쓰레드 관련 메서드 boolean i..
2022.06.30 -
[Java][Thread] 쓰레드 그룹(thread group)
1. 쓰레드 그룹은 무엇인가? 쓰레드 그룹은 서로 관련된 쓰레드를 그룹으로 다루기 위한 것 쓰레드 그룹을 생성해서 쓰레드를 그룹으로 묶어서 관리 할 수 있음 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있음 쓰레드 그룹 클래스의 생성자 / 메서드 생성자 / 메서드 설명 ThreadGroup(String name) 지정된 이름의 새로운 쓰레드 그룹을 생성 ThreadGroup(ThreadGroup parent, String name) 지정된 쓰레드 그룹에 포함되는 새로운 쓰레드 그룹을 생성 int activeCount() 쓰레드 그룹에 포함된 활성상태에 있는 쓰레드의 수를 반환 int activeGroupCount() 쓰레드 그룹에 포함된 활성항태에 있는 쓰레드 그룹의 수를 반환 void checkAcc..
2022.06.30 -
[Java][Thread] 쓰레드의 우선순위
1. 쓰레드의 우선순위는 무엇인가? 쓰레드는 우선순위(priority)라는 속성을 가지고 있는데 우선순위가 높을수록 해당 쓰레드는 더 많은 작업 시간을 갖을 수 있습니다. 예를 들어 파일 전송 기능이 있는 메신저의 경우, 파일 다운로드를 처리하는 쓰레드보다 채팅내용을 전송하는 쓰레드의 우선순위가 더 높아야 사용자가 채팅하는데 불편함이 없을 것입니다. 쓰레드의 우선순위 정하기 void setPriority(int new Priority) : 쓰레드의 우선순위를 지정한 값으로 변경 int getPrioirty() : 쓰레드의 우선순위를 반환 public static final int MAX_PRIORITY = 10; // 최대 우선순위 public static final int MIN_PRIORITY = 1..
2022.06.30 -
[Java][Thread] 싱글쓰레드와 멀티쓰레드
1. 싱글쓰레드 프로세스와 멀티쓰레드 프로세스의 차이 싱글쓰레드는 순차적으로 작업들을 처리함 멀티 쓰레드는 여러 작업들을 번갈아 가면서 수행하면서 여러 작업이 동시에 실행되는 것과 같은 효과를 줌 멀티 쓰레드가 싱글 쓰레드보다 느린 경우는 무엇인가? 같은 자원을 가지고 사용하는 작업의 경우에는 싱글쓰레드보다 느릴 수 있음 쓰레드간의 작업 전환(Context Switching)에 시간이 걸림 싱글 쓰레드보다 멀티 쓰레드가 효율적인 경우는 무엇인가? 두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글 쓰레드 프로세스보다 멀티 쓰레드 프로세스가 더 효율적임 예를 들어 사용자로부터 데이터를 입력받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같이 외부기기와의 입출력을 필요..
2022.06.30 -
[Java][Thread] 쓰레드 클래스의 start()와 run() 메서드
1. 왜 쓰레드 클래스의 run() 메서드 대신 start() 메서드를 호출해야 하는가? 일반적으로 쓰레드 인스턴스를 생성하면 쓰레드 클래스에 재정의되어 있는 run() 메서드를 호출합니다. 하지만 실제로 클라이언트에서 호출할때는 start() 메서드를 호출하여 run() 메서드를 실행시킵니다. class MyThread implements Runnable{ public void run(){ ... } } Thread t1 = new Thread(new MyThread()); t1.start(); run() 메서드 대신 start() 메서드를 호출해야 하는 이유는 run() 메서드를 호출하면 호출 스택(callstack)이 생성되지 않고 쓰레드가 독립적으로 수행되지 않습니다. 그러나 start() 메서드..
2022.06.30