스레드

스레드

    규칙 73 - 스레드 그룹은 피하라.

    스레드 그룹(thread group)은 원래 applet을 격리시켜 보안문제 해결할 목적으로 만들어졌으나 성공하지 못했다. 그러면 이런 스레드 그룹은 왜 남아있는가? 아예 쓸곳이 없는가? 그렇지는 않다. 스레드 기본연산을 여러 스레드에 동시에 적용할 수 있도록 하는 기능을 가지고 있다. 하지만 대부분이 deprecated 되었다. 결론을 이야기하자면 이미 다 페기가 되어버린 기능이다. 그렇기 때문에 신경쓸 것 없이 사용하지 말아야한다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1)

    규칙 72 - 스레드 스케줄러에 의존하지마라.

    실행해야 할 스레드가 많을 경우 어떠한 스레드를 얼마나 오랫동안 실행할지 결정은 스레드 스케줄러가 진행한다. 운영체제마다 스레드 스케줄러는 다르기 때문에 아무리 운영체제에서 효율적으로 진행한다고 하더라고 이에 의존하여 프로그램을 제작해서는 안된다. 정확하고 좋은 스레드 프로그램은 의존하는것이 아니라 실행가능한 스레드의 개수가 프로세수 개수보다 넘지 않도록 제작하는 것이다. 그렇게되면 스레드 스케줄러가 순차적으로 스레드를 실행시켜줄뿐 정책에 신경쓰지않는다. 그렇다면 실행중인 스레드의 개수를 최대한 줄일 수 있는 방법은 무엇일까? 바로 사용하지 않는 스레드는 실행하지 않고 정지하거나 종료해야한다. 그래서 바로 직전에 공부했던 스레드 풀을 사용하여 적절하게 스레드를 관리하면 좋은 프로그램을 만들 수 있다. 그..

    Java List 인터페이스 중 CopyOnWriteArrayList 소개

    자바에는 크게 4개의 List 인터페이스를 구현한 클래스가 있다. - Vector, ArrayList, LinkedList, CopyOnWriteArrayList 그 중 가장 생소한 이름이 있는데 CopyOnWriteArrayList이다. CopyOnWriteArrayList는 그냥 ArrayList랑 다르길래 화려한 이름을 가지고 있는걸까? ArrayList vs CopyOnWriteArrayList 일반 ArrayList의 경우 스레드에 안전하게 설게되어 있지 않기때문에 만약 스레드 처리가 필요한 List의 경우에 Vector를 사용하거나 ArrayList에 synchroized를 사용하여 처리하였다. 하지만 자바 1.5부터 있던 CopyOnWriteArrayList를 쉽게 이문제를 해결할 수 있다...

    synchronous vs asynchronous

    synchronous vs asynchronoussystem call의 완료를 기다리면 synchronoussystem call의 완료를 기다리지 않으면 asynchronoussynchronous vs blocking시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수가 아니면 synchronous시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수이면 blocking

    JAVA 스레드 스케줄링

    스레드 스케줄링 # 스레드 스케줄링에는 크게 선점형과 협력형 두 가지가 있다. 선점형 스레드 스케줄러- 선점형 스레드 스케줄러는 스레드에게 공평하게 분배된 CPU 시간이 소진되었을 때, 스레드를 중지시키고 다른 스레드에게 CPU 제어권을 넘겨주는 일을 결정한다. 협력형 스레드 스케줄러- 협력형 스레드 스케줄러는 CPU 제어권을 다른 스레드에게 넘겨주기 전에 실행 중인 스레드가 스스로 실행을 중단 할때 까지 기다린다.- 협력형은 기아현상이 일어 날 수 있다. 모든 자바 가상머신은 우선순위에 따른 선점형 스레드 스케줄링 방식의 사용이보장된다.(선점형 스레드는 우선순위가 높은 스레드를 먼저 실행시키는 등의 문제로 인해 다른 스레드들은 기아현상에빠질 수도 있다. 잘 사용해야 한다.)-> 우선순위가 높은 스레드들..

    Thread 폴링 방식

    폴링 방식계속 돌면서 쓰레드가 종료될 때까지 while문으로 대기하다가 출력되면 종료콜링 방식쓰레드 안에서 종료되면 호출 하는 방식호출할 클래스의 레퍼런스를 알기위해서 대게 생성자로 해당 클래스에 대한 정보를 넘긴다.콜백이 폴링보다 좋은 이유는 CPU 시간을 낭비하지 않는다.콜백에 대표적인 예는 UI 컴포넌트에 이벤트를 달고 리스너를 지정해 주는 것이다. 그러면 해당 객체는 본인을 호출할경우 해당 메소드를 호출하는 콜백을 진행한다. 이는 옵저버 패턴이라고 한다. 스레드의 run() 메소드의 실행이 거의 끝나갈때, 마지막으로 해야 할 작업은 결과값과 함께 메인 프로그램에서 미리 정해 놓은 메소드를 호출하는 것이다. 메인 프로그램이 각각의 스레드에 대해서 결과를 물어 보는 것이 아니라, 각각의 스레드가 메인..