2011-03-02 2 views
3

많은 Timer 개체를 사용할 계획 인 프로그램이 있는데, 각 Timer는 자체 스레드에서 실행됩니다. 그래서 너무 많은 스레드를 가진 프로그램의 성능을 해치는 많은 타이머를 시작할 수 있는지 궁금합니다.Timer 객체로 프로그램을 포화시킬 수 있습니까?

예를 들어, 몇 가지 다른 시간 간격으로 반전하는 부울 값을 가지기 위해 여러 개의 (부울, 타이머) 쌍을 생각했습니다.

+0

가능합니다. Do not do :-) –

답변

3

예, Timer 개체는 스레드 리소스를 소비하므로 JVM 내에서 한도에 도달 할 수 있습니다. 목표가 여러 시점에서 실행되도록 작업을 예약하는 것이라면 ScheduledThreadPoolExecutor과 같은 많은 Java ExecutorService 구현 중 하나를 살펴볼 수 있습니다. Executors 클래스는 이러한 객체를 생성하기위한 편리한 팩토리를 제공합니다. 여러 구현은 스레드 풀을 사용하며 동시에 실행할 수있는 태스크 수를 결정하도록 구성 할 수 있습니다. 또한 작업이 생성하는 출력을 소비하고 프로그램을 종료해야하는 경우 정돈 된 방식으로 작업을 종료 할 수 있습니다.

+0

Java 1.5부터 ScheduledExecutorServie는 시간이 지정된 작업을 예약하는 데 권장되는 방법입니다. 그것은 당신이하는 일에 달려 있지만, 개인적으로는 수백 개의 스레드 (타이머)가 실용적인 최대 값이라고 생각합니다. –

0

동일한 타이머에서 둘 이상의 작업을 실행할 수 있습니다. CPU 작업이 얼마나 집중적인지에 따라 하나 또는 몇 개의 Timer 인스턴스를 사용하여 모든 작업을 관리 할 수 ​​있습니다. 또는 @ Rob가 언급하는대로 ScheduledThreadPoolExecutor를 사용할 수 있습니다.

관련 문제