반응형

제목:dank

start()와 run()


start()와 run()의 차이


run()을 호출하는 것은 생성된 쓰레드를 실행시키는 것이 아니라 단순히 클래스에 속한 메서드를 하나 호출하는것


start()는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택(call stack)을 생성 한 다음에 run()을 호출해서 생성된 호출스택에 run()이 첫번째로 저장되게 한다



start()는 호출스택을 생성 run()까지 진행하는 셈


모든 쓰레드는 독립적임


단독의 호출스택이 필요함  그래서 쓰레드를 생성하고 실행시킬때마다 새로운 호출스택이 생성되고 쓰레드가 종료되면 작업에 사용된 호출스택은 소멸



1.main메서드에서 쓰레드의 start메서드를 호출

2.start메서드는 쓰레드가 작업을 수행하는데 사용될 새로운 호출스택을 생성

3.생성된 호출스택에 run메서드를 호출 쓰레드가 작업을 수행하도록

4.호출스택이 2개이기 때문에 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행


호출스택에서 가장위가 현제 실행중인 메서드


나머지는 대기


쓰레드가 둘이상일때는 최상위에 메서드 일지라도 대기 상태에 있을수 있다


아직 종료 되지 않은 쓰레드들의 우선순위를 고려하여 실행순서와 실행시간을 결정

쓰레드들은 지정된 순서와 시간에 실행을 한다.


주어진 시간동안 작업을 마치지 못한 쓰레드는 다시 자신의 차레가 돌아올때까지 대기 상태가됨


작업을 마친 쓰레드는 호출스택이 모두 비워지고 호출스택이 사라짐=main메서드가 종료되는 방식과 같음


main메서드 또한 쓰레드임


쓰레드=일꾼


프로그램 실행시 기본적으로 하나의 쓰레드(일꾼)을 생성 일꾼이 main메서드를 호출해서 작업이 수행 되도록 하는것


지금까지는 main메서드가 종료되면 프로그램이 종료 되었으나


main메서드가 종료 되었다 하더라고 쓰레드가 살아 있으면 프로그램은 종료 되지않는다


쓰레드가 모두 종료 되어야 프로그램이 종료된다.


쓰레드종류

1.사용자 쓰레드

2.데몬쓰레드



싱글 쓰레드와 멀티 쓰레드


하나의 쓰레드에 두개 작업 하나가 끝나면 다른 작업을 시작


두개의 쓰레드로 작업


짧은 시간동안 2개의 스레드가 번갈아 가면서 작업을 수행  동시에 두작업이 처리되는 것과 같이느낌


하나의 쓰레드던 두개의 스레드던 작업하는 시간은 같다


하지만 두개의 쓰레드가 시간이 더 걸리는데 그이유는 작업전환(contenxt switching)에 시간이 걸리기 때문


단순히 cpu만 사용하는 계산 작업이면 오히려 싱글쓰레드로 프로그래밍하는 것이 호율적


작업전환시 현재 진행중인 작업의 상태 , 다시 진행해야할 위치 등의 정보를 저장하고 읽어오는 시간이 소요됨


자바가 OS 독립적이라고 하지만 실제로는 OS종속적인 부분이 몇가지 있다 그중에 하나가 쓰레드


cpu이외의 자원을 사용하는 작업의 경우에는 싱글쓰레드 프로세스 보다 멀티 쓰레드 프로세스가 효율적


사용자 입력 시간에 다른 쓰레드를 실행 할수 있다


싱글쓰레드는 입력시간을 받는 쓰레드가 입력전까지 대기상태





쓰레드의 우선순위


쓰레드는 우선순위(priority)라는 속성(멤버변수)를 가지고 있다


우선순위에 값에 따라 쓰레드가 얻는 실행시간이 달라진다

쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 서로 다르게 지정하여

특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다.


시각적인부분이나 사용자에게 빠르게 반응해야하 하는 작업을 하는 쓰레드에 우선순위를 높혀줌


우선순위가 높아지면 먼저 실행하고 할당 시간이 늘어난다


void setPriority(int newPriority)-쓰레드의 우선순위를 지정한 값으로 변경한다.


int getPriority()-쓰레드의 우선순위를 반환한다.


public static final int MAX_PRIORITY=10 //최대 우선순위

public static final int MAX_PRIORITY=1 //최소 우선순위

public static final int MAX_PRIORITY=5 //보통우선순위


우선순위의 범위 1~10

절대적이 아닌 상대적임


실행시간 배정 시간 차이가 큼


main메서드를 수행하는 쓰레드는 우선순위가 5

main메서드 내에서 실행하는 쓰레드의 우선순위는 자동적으로 5가됨


우선순위 1차이는 별차이가 없으나 2이상의 차이는 많은 차이가 있다.


쓰레드 그룹(Thread group)


서로 관련된 쓰레드를 그룹으로 다루기 위해서 윈도우 폴더에 넣어서 관리하는 것과 같음


메서드에는 생성,포함,반환,삭제,확인,출력 등등이있다.


Thread(ThreadGroup group, String name)

Thread(ThreadGroup group, Runnable target)

Thread(ThreadGroup group, runnable target, string name)

Thread(ThreadGroup group, runnable target, string name, long stackSize)


모든 쓰레드는 그룹에 포함되어 있어야 한다


쓰레드는 기본적으로 자신을 생성한 쓰레드와 같은 쓰레드 그룹에 속함


ex) main쓰레드는 main쓰레드 그룹에 가비지 컬렉션을 수행하는 Finalizer쓰레드는 system쓰레드 그룹에 속함


static int activeCount():쓰레드 자신이 속한 쓰레드 그룹에 작업이 완료되지 않은 쓰레드의 수를 반환


ThreadGroup getThreadGroup():쓰레드 자신이 속한 쓰레드 그룹을 반환




반응형

'코딩 > Java' 카테고리의 다른 글

쓰레드(Thread)-1  (0) 2016.04.04
컬렉션 프레임웍(Collection Framework),동기화(Synchroization)  (0) 2016.04.01
내부클래스(inner class)  (0) 2016.04.01
java.long 패키지  (0) 2016.03.30
예외처리(excption handling)  (0) 2016.03.29

+ Recent posts