본문 바로가기

java thread

자바 쓰레드(Thread) - 쓰레드(Thread)의 isAlive() 예제 보통 쓰레드로 프로그래밍을 할때 main쓰레드에서 자식 쓰레드를 생성후 자식 쓰레드들이 다 끝난 다음에 main쓰레드를 마쳐야 한다. 이럴때 main에서는 자식쓰레드들이 끝날때까지 기달려야 하는데 이럴때 isAlive()메소드를 사용하면 된다. 아래 예제는 메인에서 세개의 쓰레드 생성후 마칠때까지 메인에서 while문으로 점을 찍는데 이때 체크를 isAlive로 하였다. 더보기
자바 쓰레드(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와 객체의 관계 1. Thread는 객체와 직교하는 개념이다. - 객체가 독립된 스레드에서 움직이고 있는것은 아니다. - 멀티 스레드는 어디까지나 스레드라는 처리 흐름이 여러개 존재 할 수 있다는 의미이다. - 어떤 스레드에서 움직이기 시작한 메서드가 다른 메서드를 호출했을 때 호출된 측의 메서드와 동일한 스레드에서 동작한다. - 스레드의 경계와 객체의 경계는 전혀 관계가 없다. 더보기
자바 쓰레드(Thread) - Runnable을 이용해서 구현 Runnable을 이용해서 구현하기 전에 sleep()메소드를 사용해서 차례차례 쓰레드가 결과값이 찍게 만들어 보자. run메소드에 sleep메소드를 추가하였다. sleep메소드 안의 숫자는 밀리세컨이다. 즉 1초가 들어오는 쓰레드들을 재운것이다. 이제 Runnable을 이용해보자. 내용은 크게 바뀌는것은 없다. 예제를 보자 Runnable을 implements 받았다. 주석에도 써놨지만 Runnable 인터페이스는 run메소드만 가지고있다. 따라서 sleep()은 없지만 다행이도 sleep() Thread클래스의 static메소드이다. 따라서 사용 할 수 있고 메인메소드의 start()도 없다. 결국 start()를 호출해주기 위해서는 Thread클래스로 객체를 선언해서 ThreadTest의 레퍼런스 .. 더보기