본문 바로가기

html5

자바 쓰레드(Thread) - 쓰레드(Thread)의 우선순위(Priority)예제 코딩을 하면서 직접 우선순위를 셋팅할 일은 거의 없다고 한다. 뭐 정말 한다면 말리진 안겠지만.. 그래도 어떻게 돌아 가는지 예제를 살펴보자. 더보기
자바 쓰레드(Thread) - 쓰레드(Thread)의 우선순위(Priority) * 스레드가 수행하는 작업의 중요도에 따라 스레드의 우선순위를 서로 다르게 지정하여 특정스레드가 더 많은 작업 시간을 갖도록 할 수 있다. - 우선순위의 낮고 높음은 상대적인 것이다. - 우선순위는 스레드를 생성한 스레드로부터 상속받는다. - 스레드를 실행하기 전에만 우선순위를 변경 할 수 있다. - 자바의 기본 선택 규칙은 고정 우선순위 스케줄링이다. - 수행가능한(Runnable)스레드 중(또는 모니터 획득을 기다리는 큐내의 스레드중) 가장 우선순위가 높은것에 코드 수행기회를 부여한다. - 같은 우선순위의 스레드에 대해서는 라운드 로빈 방식으로 선택한다. - 현재 수행중인 스레드 보다 높은 우선순위의 스레드가 수행 가능한 상태가 되면 바로 기회를 부여한다.(선점, preemption) void set.. 더보기
자바 쓰레드(Thread) - 쓰레드(Thread)의 중지 예제 1. flag방식으로 쓰레드 중지예제 코드를 보면 어렵지 않다. 메인 메소드에서 다른 클래스(스레드 상속) 객체 생성후 호출 그러면 StopThread에서 while문을 돌면서 Thread is alive를 찍는다. 그리고 난후 메인에서 잠깐 쉬고 플래그를 변경하는 메소드를 호출하면 플래그가 바뀌면서 스레드가 중지 된다. 스레드를 중지할수 있는 방법중 하나지만 만약 while문안의 로직이 엄청 복잡하고 오래 걸린다면 즉각 중지를 시키지 못하고 원하는 타이밍을 놓칠 경우도 있다. 조금 문제가 될수도 있다. 2. interrupt()를 이용한 예제 위의 예제를 interrupt()를 이용해서 바꿨다. 우선 메인 메소드에서 flag를 호출하는 메소드 대신(위의 예제 참조) 생성한 스레드 객체에 interrup.. 더보기
자바 쓰레드(Thread) - 쓰레드(Thread)의 중지 Thread를 시작시킨 이후 만약 글 Thread를 중간에 중지시키고 싶다면? - stop() : 자바 API에 보면 deprecated다. 사용하는걸 권장 안함. - flag이용 : 개발자가 특정 변수를 체크하면서 중지 시킬지 결정 - interrupt() : 현재 수행중인 명령을 중지 시킬때.(wait(), join(), sleep() 명령) 많이 권장되는 방법. InterruptedException을 발생 catch해서 후속 작업을 할 수도 있다. 더보기
자바 쓰레드(Thread) - start()와 run()에 대한 예제 start()와 run()에 대한 예제를 보자. 간단한 예제를 보자. 아래 두개의 클래스가 있다. 우선 메인 메소드가 있는 클래스에서 다른 클래스(스레드를 상속받은) 객체를 생성하고 start()메소드를 호출하면 스레드가 생성이 된다. 이 말은 start()를 호출하면 run()메소드가 호출되고 그 후 다시 시점은 메인메소드가 있는 클래스로 돌아 온다. 물론 run()에 의한 스레드는 독립적으로 작동이 되는 것이다. 그래서 main()에서 실행된 스레드 그리고 start()에 의한 스레드 총 2개가 있다. 그럼 아래 예제에서 보면 스레드를 상속받은 클래스에서 일부러 stack을 trace해보았다. 위의 오류를 보면 main메소드에서 실행되는것이 아니라 run->throwException으로 두단계로 끝냈.. 더보기
자바 쓰레드(Thread) - Thread와 객체의 구분에 대한 예제 제목 그대로 스레드는 객체에 속한것이 아니다..(말이 조금 그런가..) 일단 이전 글에서의 그림을 다시 보자. 아래 예제에서 두개의 클래스를 만들었다. 총 3개의 스레드가 생성이 된다. main(), tno1, tno2에 의한 스레드. tno1, tno2 즉 ThreadNObjectChild객체를 생성해서 스레드가 구동이 되어도. ThreadNObjectChild안에 있는 display메소드는 2개의 스레드가 생성이 될때 전혀 관계가 없다. 같은 클래의 안에 있어서 객체가 생성되서 콜이 되어도 main에서 콜할때만 "called by main()"만 찍히기 tno1, tno2에 의한 System.out.println은 없다. 따라서 쓰레드는 객체 생성에 의해서 스레드가 생성될때 그 안의 모든 메소드에 영.. 더보기
자바 쓰레드(Thread) - Thread와 객체의 관계 1. Thread는 객체와 직교하는 개념이다. - 객체가 독립된 스레드에서 움직이고 있는것은 아니다. - 멀티 스레드는 어디까지나 스레드라는 처리 흐름이 여러개 존재 할 수 있다는 의미이다. - 어떤 스레드에서 움직이기 시작한 메서드가 다른 메서드를 호출했을 때 호출된 측의 메서드와 동일한 스레드에서 동작한다. - 스레드의 경계와 객체의 경계는 전혀 관계가 없다. 더보기
자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread) 예제 2 1. 첫번째 예제 : 싱글쓰레드 javax.swing을 이용해서 입력받는 패널을 띄운다. 입력 값을 받으면 값을 콘솔에 찍고 그 다음에 for문을 돈다. 이 이야기는 입력 받은 값이 없으면 프로그램이 거기서 멈추고 for문을 타지 않는다. 전형적인 싱글쓰레드다. 2. 첫번째 예제 : 멀티쓰레드2 위의 싱글쓰레드에서 for문을 따로 뺐다. 그리고 Thread를 상속받아서 쓰레드로 만들었다. 이제는 input 패널이 뜨더라고 for문은 돈다. 멀티쓰레드다. 3. 두번째 예제 : 멀티쓰레드 위의 첫번째 예제에다가 10초동안 input패널에 값을 입력하지 않았을때 프로그램을 종료하도록 했다. 이를 위해서 메인메소드가 있는 클래스에 inputCheck라는 static boolean값을 생성하였다. 자식쓰레드중 f.. 더보기
자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread) 예제 처음에 *을 300개 찍고 다음에 #을 300개 찍는걸로 싱글쓰레드와 멀티쓰레드로 나누어 보자. 1. 싱글쓰레드 방법 2. 멀티쓰레드 - 멀티 쓰레드는 클래스를 두개로 나누었다. 메인 메소드가 있는 클래스. 어차피 메인 메소드도 쓰레드라고 했다. 메인 메소드에서 자식 쓰레드를 호출해서 동시에 시작한다. 자식쓰레드 더보기
자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread)