본문 바로가기

쓰레드

자바 쓰레드(Thread) - 쓰레드(Thread)의 yield() 예제 yield의미는 사전적으로 양보의 뜻을 가지고 있다. 아래 예제에서 쓰레드3개를 생성하고 돌린다. 이론상으로 첫번째 쓰레드가 다 끝나고 두번째~ 세번째가 실행 될 수도 있는데 보통 요즘 OS에서는 알아서 interrupt를 걸어서 서로서로 실행 하는걸 볼 수있다. 자바에서도 그런 역할을 하는것중 하나가 yield() 메소드이다. 더보기
자바 쓰레드(Thread) - 데몬쓰레드(Daemon Thread) 1. 데몬쓰레드가 아닌 다른 일반 스레드의 작업을 돕는 보조적인 역할을 수행 2. 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료 3. 예로서 가비지 컬렉터, 워드 프로세서의 자동 저장, 화면 자동 갱신등이 있다. 4. 쓰레드를 생성한 다음 실행전에 setDㅁemon(true)를 호출. 쓰레드 종류는 크게 두가지다 : 사용자 쓰레드, 데몬 쓰레드. 이전에 했던 예제는 전부 사용자 쓰레드였다. 사용자 쓰레드는 독립쓰레드고 데몬쓰레드는 종속 쓰레드이다. 예제를 보자 1. 첫번째 예제 티스토리나 포털 사이트 게시판을 보면 임시저장..알아서 자동저장하는 기능들이 있다. 아무튼 이와 비슷하게 쓰레드를 이용해서 구현할수 있다. 다만 여기서 보여주는건 데몬은 보조적인 역할이라고 했는데 그걸 확인해보고.. 더보기
자바 쓰레드(Thread) - 쓰레드(Thread)의 우선순위(Priority)예제 코딩을 하면서 직접 우선순위를 셋팅할 일은 거의 없다고 한다. 뭐 정말 한다면 말리진 안겠지만.. 그래도 어떻게 돌아 가는지 예제를 살펴보자. 더보기
자바 쓰레드(Thread) - 쓰레드(Thread)의 중지 예제 1. flag방식으로 쓰레드 중지예제 코드를 보면 어렵지 않다. 메인 메소드에서 다른 클래스(스레드 상속) 객체 생성후 호출 그러면 StopThread에서 while문을 돌면서 Thread is alive를 찍는다. 그리고 난후 메인에서 잠깐 쉬고 플래그를 변경하는 메소드를 호출하면 플래그가 바뀌면서 스레드가 중지 된다. 스레드를 중지할수 있는 방법중 하나지만 만약 while문안의 로직이 엄청 복잡하고 오래 걸린다면 즉각 중지를 시키지 못하고 원하는 타이밍을 놓칠 경우도 있다. 조금 문제가 될수도 있다. 2. interrupt()를 이용한 예제 위의 예제를 interrupt()를 이용해서 바꿨다. 우선 메인 메소드에서 flag를 호출하는 메소드 대신(위의 예제 참조) 생성한 스레드 객체에 interrup.. 더보기
자바 쓰레드(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) 더보기